ASP.NET Core JWT 身份验证受众属性

Posted

技术标签:

【中文标题】ASP.NET Core JWT 身份验证受众属性【英文标题】:ASP.NET Core JWT Authentication Audience Property 【发布时间】:2021-10-27 23:00:11 【问题描述】:

我是 ASP.NET Core 的新手。

我正在使用 JWT 对 Web api 进行身份验证。

在大多数在线教程的 JWT 代码中,我们可以找到如下所示的 Issuer 和 Audience 属性。

var tokenDescriptor = new SecurityTokenDescriptor
                
                    Issuer = configuration["Jwt:Issuer"],
                    Audience = configuration["Jwt:Audience"],
               ...
                

jwt.TokenValidationParameters = new TokenValidationParameters
        
                ValidateIssuer = true,
                ValidateAudience = true,
                ...
        ;

谁能解释一下,这两个有什么用,是用来验证 JWT Server 和 JWT Client

以及如何验证这些

【问题讨论】:

【参考方案1】:

如果您注册以下服务,则身份验证中间件将代表您进行验证。

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>  
      
        options.TokenValidationParameters = new TokenValidationParameters  
          
              ValidateIssuer = true,  
              ValidateAudience = true,   
              ValidIssuer = issuer // your issuer,  
              ValidAudience = audience // your audience
         ;  
     

【讨论】:

我已经这样做了,如果我没记错的话,ValidateAudience 意味着请求必须来自同一个域,不是吗?如果是这种情况,它甚至无法从其他域工作【参考方案2】:

Issuer 和 Audience 是 JWT 令牌的标准声明字段:

Issuer:标识发布 JWT 的委托人。 Audience:标识 JWT 的目标接收者。打算处理 JWT 的每个主体都必须在受众声明中使用一个值来标识自己。如果存在此声明时,处理该声明的主体未将其自身标识为 aud 声明中的值,则该 JWT 必须被拒绝。

更多详细信息,您可以查看Standard fields。

然后,对于ValidateIssuer 和ValidAudience 属性,如果您将值设置为ture,则会在令牌验证期间验证颁发者和受众。

这里有一些关于在 Issuer 和 Audience 中使用 JWT 身份验证的相关文章,您可以参考它们:

JWT Authentication In ASP.NET Core

Authentication And Authorization In ASP.NET 5 With JWT And Swagger

【讨论】:

以上是关于ASP.NET Core JWT 身份验证受众属性的主要内容,如果未能解决你的问题,请参考以下文章

使用 JWT 令牌的 ASP.NET Core 网站到 WebApi 身份验证

ASP.NET Core 5 JWT 身份验证失败,响应代码为 401

ASP.NET Core 中的 Jwt 令牌身份验证

我可以使用我的 JWT 进行身份验证,但我的名称声明在我的 ASP.NET Core 应用程序中无法识别

ASP.NET Core JWT 身份验证更改声明(子)

JWT 身份验证 ASP.NET Core MVC 应用程序