【问题标题】:How to do JWT token based authentication for Asp.Net Core 2.2 MVC Web Application?如何为 Asp.Net Core 2.2 MVC Web 应用程序进行基于 JWT 令牌的身份验证?
【发布时间】:2019-11-06 22:42:42
【问题描述】:

我有 Asp.Net Core 2.2 MVC Web 应用程序,其中通过 Asp.Net Core Web Api 2.2 处理数据库调用,此 Web API 将生成 JWT 令牌发布验证登录凭据并返回到 MVC 应用程序JWT 令牌。

在用 Authorize 属性装饰的 Asp.Net 核心 MVC 应用程序控制器中,以验证来自浏览器的后续请求,但在这里我无法验证 JWT 令牌。

所以请建议如何在 Asp.Net Core 2.2 MVC Web 应用程序中验证 JWT 令牌。

提前致谢!

代码:

 services.AddAuthentication(j =>
{
    j.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
    j.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
    j.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(x =>
{
    x.SaveToken = true;
    x.RequireHttpsMetadata = true;
    x.TokenValidationParameters = new TokenValidationParameters
    {
        ValidateIssuer = true,
        ValidateAudience = true,
        //ValidateLifetime = true,
        //ValidateIssuerSigningKey = true,
        ValidIssuer = "xyz.com",
        ValidAudience = "xyz.com",
        IssuerSigningKey = new SymmetricSecurityKey(key),
        ClockSkew = TimeSpan.FromMinutes(5)
    };
});


app.UseAuthentication();
app.UseMvc(routes =>
{
    routes.MapRoute(
    name: "default",
    template: "{controller=Login}/{action=Login}/{id?}");
});

【问题讨论】:

  • 我回答了一个我认为您正在寻找的问题,希望对您有所帮助stackoverflow.com/a/48890659/5517088
  • 感谢@Kevin 提供的信息,但我之前已经尝试过所有这些步骤,但遇到了同样的问题
  • 您面临的问题/错误信息是什么?
  • 您能否提供一个请求示例以及您的授权标头
  • @Nan Yu 得到一个 401 未授权异常

标签: asp.net-core-mvc jwt asp.net-core-webapi


【解决方案1】:

您似乎正在使用用户的凭据向 web api 发送请求,web api 验证凭据并使用 JWT 令牌返回到 mvc 客户端。

在您的客户端应用程序中,获取令牌并解码以获取声明后,您可以创建新的 ClaimsIdentity,添加您的声明和登录用户。请参阅代码示例here

如果您想知道如何解码 JWT 令牌,可以参考以下代码示例:

How to decode JWT Token?

Decoding and verifying JWT token using System.IdentityModel.Tokens.Jwt

【讨论】:

  • 让我更清楚地说明我的问题。从 MVC 应用程序用户将登录,然后 Web API 将验证用户名和密码并将 JWT 令牌返回给 MVC 应用程序,这个 mvc 应用程序也没有使用 asp.net 身份,所以我的计划就像使用这个 JWT 令牌并将其添加到标题或 cookie 来验证来自浏览器的任何其他请求以访问 MVC 应用程序资源。如果您需要任何其他信息,请告诉我。提前致谢。
  • 你的场景不清楚,你的 mvc 需要登录,所以用 crdential 向 web api 发送请求,web api 用 token 发回,现在你的 mvc 将解码 token,获取声明和登录,所以 [authorzie] 将在 mvc app 上工作,我的代码示例显示这与 asp.net identity 无关。只需将用户存储在 cookie 中
  • 如果你想在 MVC 应用中实现 JWT 不记名认证,你应该确认 issue/audience/signature 配置与令牌声明匹配。
猜你喜欢
  • 2019-10-19
  • 2019-06-30
  • 2019-09-06
  • 2021-12-17
  • 2015-05-16
  • 2021-12-24
  • 2014-06-04
  • 1970-01-01
  • 2020-09-04
相关资源
最近更新 更多