ASP.NET Core JWT认证中Issuer与Audience属性的作用及验证方法
JWT中Issuer与Audience的作用及验证流程
1. 两个属性的核心定义
- Issuer(签发者):代表生成并签发这个JWT的主体,通常是你的身份认证服务/授权服务的唯一标识(比如服务域名、服务唯一名称)。作用是明确令牌的合法来源,避免第三方伪造的未知来源令牌被你的服务接受。
- Audience(受众):代表这个JWT的目标接收方,也就是这个令牌允许被哪个业务服务/客户端使用,通常是你的业务API的唯一标识。作用是限制令牌的使用范围,避免某个业务服务的令牌被拿去调用其他不相关的服务。
注意:两个属性并不是严格对应“JWT服务端和JWT客户端”。举个例子:如果你的架构里有独立的授权服务A负责发令牌,还有订单API、用户API两个业务服务,那么Issuer统一填A的标识,订单API的Audience填订单服务的标识、用户API的Audience填用户服务的标识即可。
2. 对应代码的作用
你给出的两段代码分别对应JWT的签发阶段和校验阶段:
// 签发JWT时的配置,会把这两个值写入JWT的Payload中 var tokenDescriptor = new SecurityTokenDescriptor { Issuer = configuration["Jwt:Issuer"], Audience = configuration["Jwt:Audience"], // 其他配置:过期时间、签名密钥、自定义声明等 }
// 校验JWT时的配置,开启对应开关后会自动校验两个字段的合法性 jwt.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true, // 其他配置:签名校验、过期时间校验等 };
3. 完整验证流程
整个校验逻辑是在收到客户端携带JWT的请求时自动执行的,步骤如下:
- 解析收到的JWT,提取Payload中的
iss(对应Issuer)和aud(对应Audience)字段值 - 如果开启了
ValidateIssuer = true,将提取到的iss值和服务本地配置的合法Issuer值做等值比对,不一致则直接返回401未授权 - 如果开启了
ValidateAudience = true,将提取到的aud值和服务本地配置的合法Audience值做等值比对,不一致则直接返回401未授权 - 两个字段校验都通过后,才会继续执行签名、过期时间等其他校验逻辑
4. 补充说明
如果是单体应用,授权逻辑和业务API都在同一个服务中,你可以将Issuer和Audience配置为相同的值,只要签发和校验阶段的配置保持一致即可。这两个校验开关都可以手动关闭,但不推荐这么做,会增大令牌伪造、越权调用的安全风险。
内容的提问来源于stack exchange,提问作者ADev01
相关产品推荐
相关产品推荐

