从 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,它会有所帮助

希望我已经阐明了你的观点。如果没有那么可以再次抛出 :)

字段 issstandard 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 不兼容。