【问题标题】:How can I specify kid when signing jwt with SymmetricSecurityKey?使用 SymmetricSecurityKey 签署 jwt 时如何指定孩子?
【发布时间】:2018-09-28 15:01:20
【问题描述】:

我正在后端验证 jwt 令牌,其中令牌可以从具有不同密钥和算法的多个来源发出。

之前我只使用RsaSha256 密钥进行验证,现在我设置接受使用HmacSha256 签名的令牌。

问题是 - 在验证令牌时,我曾经查看孩子值来解析证书/安全密钥。但是使用HmacSha256 生成的令牌不包含孩子值。

我目前只是在 IssuerSigningKeyResolver 委托中检查 kid == null 以确定应该使用哪个密钥进行验证(如果为 null,则使用 Hmac 密钥,否则使用匹配的 rsa 密钥)。但只要我一直只使用一个 Hmac 密钥签名,它就可以工作,如果我需要使用多个对称密钥进行签名,那么我将无法确定使用哪一个进行验证。

  • 如何在令牌中包含孩子?
  • 如果不可能,什么是 确定验证时使用哪个密钥的推荐方法?
  • 还有我 我不能 100% 确定接受这些密钥的混合是否安全,是吗?

以下大致是我使用对称密钥的令牌生成器-

var tokenHandler = new JwtSecurityTokenHandler();

var tokenDescriptor = new SecurityTokenDescriptor
{

    Subject = new ClaimsIdentity(claims),
    Issuer = issuer,
    Audience = aud,
    Expires = expirationTime,

    SigningCredentials = new SigningCredentials(
        new SymmetricSecurityKey(symmetricKey),
        SecurityAlgorithms.HmacSha256
        )
};

var securityToken = tokenHandler.CreateToken(tokenDescriptor);

我使用Microsoft.IdentityModel.Tokens 来生成和验证令牌。

【问题讨论】:

    标签: c# security jwt identity


    【解决方案1】:

    我刚才也在寻找同样的东西。 只需在构造 SymmetricSecurityKey 时添加 KeyId。

        SigningCredentials = new SigningCredentials(
            new SymmetricSecurityKey(symmetricKey) { KeyId = "Your Key Id" },
            SecurityAlgorithms.HmacSha256
        )
    

    【讨论】:

      猜你喜欢
      • 2020-05-17
      • 2021-05-25
      • 2015-04-03
      • 2020-09-04
      • 2019-04-20
      • 1970-01-01
      • 2021-02-06
      • 1970-01-01
      相关资源
      最近更新 更多