我正在使用 Thinktecture.IdentityModel.Tokens 包在ASP.NET中实现JWT令牌。我想通过使用以下配置从我的令牌中删除字段颁发者:
new JwtBearerAuthenticationOptions
{
AuthenticationMode = AuthenticationMode.Active,
AllowedAudiences = new[] { audienceId },
IssuerSecurityTokenProviders = new IIssuerSecurityTokenProvider[]
{
new SymmetricKeyIssuerSecurityTokenProvider(issuer, audienceSecret)
},
TokenValidationParameters = new System.IdentityModel.Tokens.TokenValidationParameters() { ValidateIssuer = false }
}
然后我在没有发行者的情况下生成JWT令牌:
var token = new JwtSecurityToken(issuer:null, audience:audienceId, signingCredentials: signingKey);
但是,在添加 TokenValidationParameters 并删除颁发者字段后,我收到错误 401 Unauthorized 。如果我将发行人留在JWT中,验证工作完全正常。
我可以从JWT中删除发行人吗?如果没有,那么" ValidateIssuer"参数吗?
答案 0 :(得分:1)
字段iss
在JWT中是standard field,但根据规范it is optional:
iss(发行人)索赔确定了发行JWT的委托人。该权利要求的处理通常是特定于应用的。 iss值是包含StringOrURI值的区分大小写的字符串。使用此声明是可选的。
然而,由于iss
字段表示发出令牌的身份提供者,因此库通常需要能够验证令牌的来源。我猜测这就是为什么你不能在不破坏的情况下删除它。
仅仅从查看规范来看,你应该能够删除它。
答案 1 :(得分:0)
发行人是可选的
颁发者声明代表授权服务器(令牌发行者)方(即,应用程序URL的路径将生成令牌,可以是http://localhost:4496/webapi或www.domainexample.com)。
实施TokenValidationParameters的最佳方式,这里是link
请完成此link,这将有所帮助
希望我明确你的观点。如果没有,那么可以再次抛出:)
答案 2 :(得分:0)
尽管根据JWT标准,issuer是可选的,但 System.Identitymodel.Tokens.Jwt 包v.4.x显然仍然需要它。由于 System.Identitymodel.Tokens.Jwt 已更新为v.5,因此应解决该问题。但是,此版本的软件包似乎与Microsoft Owin不兼容。