使用SymmetricSecurityKey签署jwt时如何指定kid?

时间:2018-04-18 11:24:46

标签: c# security jwt identity

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

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

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

我目前正在检查kid == null委托中的IssuerSigningKeyResolver以确定应使用哪个密钥进行验证(如果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来生成和验证令牌。

1 个答案:

答案 0 :(得分:0)

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

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