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

Posted

技术标签:

【中文标题】使用 SymmetricSecurityKey 签署 jwt 时如何指定孩子?【英文标题】:How can I specify kid when signing jwt with SymmetricSecurityKey? 【发布时间】: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 来生成和验证令牌。

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于使用 SymmetricSecurityKey 签署 jwt 时如何指定孩子?的主要内容,如果未能解决你的问题,请参考以下文章

表单签核的审批思考

使用第三方电子合同平台签电子合同该怎么签?

c#大圣之路笔记——TFS解决离职人员文件签出遗留签入问题

我可以使用替代设备将用户签入会场吗?

电脑便签敬业签如何在团队便签中上传图片?

如何克隆然后使用 git-gulp 正确签出标签 [重复]