从 JWT 中删除 "issuer" 导致 401 Unauthorized
Removing "issuer" from JWT results in 401 Unauthorized
我正在使用 Thinktecture.IdentityModel.Tokens 包在 ASP.NET 中实现 JWT 令牌。我想通过使用以下配置从我的令牌中删除字段 issuer:
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" 参数有什么作用?
发行者是可选的
Issuer claim 代表授权服务器(Token Issuer)方。(即它是你的应用程序 URL 的路径,它将生成令牌,它可以是 http://localhost:4496/webapi 或 www.domainexample.com) .
实现 TokenValidationParameters 的最佳方式,这里是 link
请仔细阅读此link,它会有所帮助
希望我已经阐明了你的观点。如果没有那么可以再次抛出 :)
字段 iss
是 standard field in JWT, but according to the specification it is optional:
The iss (issuer) claim identifies the principal that issued the JWT. The processing of this claim is generally application specific. The iss value is a case-sensitive string containing a StringOrURI value. Use of this claim is OPTIONAL.
然而,由于 iss
字段代表颁发令牌的身份提供者,图书馆通常需要能够验证令牌的来源。我猜这就是为什么你不能在不破坏东西的情况下删除它的原因。
只要查看规范,您应该能够删除它。
尽管根据 JWT 标准 issuer 是可选的,但 System.Identitymodel.Tokens.Jwt 包 v.4.x 显然仍然需要它。由于 System.Identitymodel.Tokens.Jwt 已更新到 v.5,因此问题应该已解决。但是,这个版本的包似乎与 Microsoft Owin 不兼容。
我正在使用 Thinktecture.IdentityModel.Tokens 包在 ASP.NET 中实现 JWT 令牌。我想通过使用以下配置从我的令牌中删除字段 issuer:
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" 参数有什么作用?
发行者是可选的
Issuer claim 代表授权服务器(Token Issuer)方。(即它是你的应用程序 URL 的路径,它将生成令牌,它可以是 http://localhost:4496/webapi 或 www.domainexample.com) .
实现 TokenValidationParameters 的最佳方式,这里是 link
请仔细阅读此link,它会有所帮助
希望我已经阐明了你的观点。如果没有那么可以再次抛出 :)
字段 iss
是 standard field in JWT, but according to the specification it is optional:
The iss (issuer) claim identifies the principal that issued the JWT. The processing of this claim is generally application specific. The iss value is a case-sensitive string containing a StringOrURI value. Use of this claim is OPTIONAL.
然而,由于 iss
字段代表颁发令牌的身份提供者,图书馆通常需要能够验证令牌的来源。我猜这就是为什么你不能在不破坏东西的情况下删除它的原因。
只要查看规范,您应该能够删除它。
尽管根据 JWT 标准 issuer 是可选的,但 System.Identitymodel.Tokens.Jwt 包 v.4.x 显然仍然需要它。由于 System.Identitymodel.Tokens.Jwt 已更新到 v.5,因此问题应该已解决。但是,这个版本的包似乎与 Microsoft Owin 不兼容。