【问题标题】:Do I need to validate JWT tokens in asp.net core 2 REST API?我需要在 asp.net core 2 REST API 中验证 JWT 令牌吗?
【发布时间】:2019-04-20 03:54:56
【问题描述】:

我的 asp.net 核心 REST API 配置中有以下代码:

services
    .AddAuthentication(options => { options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme; })
    .AddJwtBearer(options =>
        {
            options.Authority = "https://login.microsoftonline.com/XXXTenantIDXXX";
            options.Audience = "XXXX clientId XXXX";
        });

services.AddMvc(o =>
    {
        var policy = new AuthorizationPolicyBuilder()
            .RequireAuthenticatedUser()
            .Build();
        o.Filters.Add(new AuthorizeFilter(policy));

它验证请求。它工作正常。

我担心 jwt 令牌伪造或来自租户中其他 AAD 应用程序的 jwt 令牌。

我希望上面的代码向 asp.net 核心身份验证提供所有信息,以验证 jwt 是否有效并且其受众是正确的 AAD 应用程序。

我想在这里确认一下我的期望,并询问我是否需要额外的逻辑(代码)来验证 JWT 令牌?

【问题讨论】:

  • 总是要做检查,必须要做的事情之一是检查用户是否存在,即使 JWT 有效,该用户也可能被删除或禁止或其他任何事情。关于您检查令牌的问题,如果您的秘密被盗,您该怎么办?没有办法知道 VALID jwt 是否被伪造,最后,它是有效的......
  • @Melardev。最重要的是确保 JWT 签名是否有效。你知道 ASP.NET 中间件是否会那样做吗?
  • 如下所述,是的,绝对,它验证令牌,并且中间件还可以解析通过 jwt 有效负载可用的一些声明,例如角色,阅读此角色相关功能jerriepelser.com/blog/using-roles-with-the-jwt-middleware

标签: asp.net-mvc asp.net-core-2.0 asp.net-core-webapi .net-security


【解决方案1】:

是的,Asp.Net Core 中间件验证 JWT 令牌。确保您正在配置 JWT Bearer Options 和令牌验证参数,以便 Asp.Net Core Middleware 对其进行验证。

例如:

      services.AddAuthentication(auth =>
        {
            auth.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
            auth.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
        }).AddJwtBearer(options =>
        {               
            options.ClaimsIssuer = jwtAuthSettings.ValidIssuer;//Your issuer
            options.IncludeErrorDetails = true;
            options.RequireHttpsMetadata = true;
            options.SaveToken = true;
            options.Validate(JwtBearerDefaults.AuthenticationScheme);
            options.TokenValidationParameters = new TokenValidationParameters()
            {
                ClockSkew = TimeSpan.FromMinutes(30),
                ValidateIssuer = true,
                ValidateAudience = true,
                ValidateLifetime = true,
                ValidateIssuerSigningKey = true,
                ValidIssuer = jwtAuthSettings.ValidIssuer, //Your issuer
                ValidAudience = jwtAuthSettings.ValidAudience,//Your Audience
                IssuerSigningKey = jwtAuthSettings.SymmetricSecurityKey, //Your Key
                NameClaimType = ClaimTypes.NameIdentifier,
                RequireSignedTokens = true,
                RequireExpirationTime = true

            };
        });

【讨论】:

    猜你喜欢
    • 2020-08-22
    • 1970-01-01
    • 2020-09-04
    • 2021-06-27
    • 2013-05-30
    • 2020-07-01
    • 2021-12-17
    • 2021-09-04
    • 2019-10-20
    相关资源
    最近更新 更多