【问题标题】:Removing "issuer" from JWT results in 401 Unauthorized从 JWT 中删除“颁发者”会导致 401 Unauthorized
【发布时间】:2017-03-29 11:12:35
【问题描述】:

我正在使用 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 并删除 issuer 字段后,我收到错误 401 Unauthorized。如果我将颁发者保留在 JWT 中,则验证工作得非常好。

我可以从 JWT 中删除颁发者吗?如果不是,“ValidateIssuer”参数有什么作用?

【问题讨论】:

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


    【解决方案1】:

    发行人是可选的

    Issuer 声明代表授权服务器(令牌颁发者)方。(即,它是您的应用程序 URL 的路径,它将生成令牌,它可以是 http://localhost:4496/webapi 或 www.domainexample.com)。

    实现TokenValidationParameters的最佳方式,这里是link

    请通过这个link,它会有所帮助

    希望我清楚你的意思。如果没有,那么可以再次抛出:)

    【讨论】:

      【解决方案2】:

      字段iss是JWT中的standard field,但根据规范it is optional

      iss(颁发者)声明标识了颁发 JWT 的委托人。此声明的处理通常是特定于应用程序的。 iss 值是包含 StringOrURI 值的区分大小写的字符串。使用此声明是可选的。

      尽管如此,由于iss 字段代表颁发令牌的身份提供者,图书馆通常要求能够验证令牌的来源。我这就是为什么你不能在不破坏东西的情况下移除它。

      只要看一下规范,你应该还是可以删除它的。

      【讨论】:

        【解决方案3】:

        即使根据 JWT 标准 issuer 是可选的,System.Identitymodel.Tokens.Jwt 包 v.4.x 显然仍然需要它。由于 System.Identitymodel.Tokens.Jwt 已更新到 v.5,因此该问题应该得到解决。但是,这个版本的包似乎与 Microsoft Owin 不兼容。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-10-20
          • 2015-03-13
          • 1970-01-01
          • 2015-12-29
          • 2013-01-20
          • 1970-01-01
          • 2012-10-27
          相关资源
          最近更新 更多