删除"发行人"来自JWT的结果是401 Unauthorized

时间:2016-11-15 14:15:47

标签: c# asp.net jwt access-token

我正在使用 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"参数吗?

3 个答案:

答案 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不兼容。