使用 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 密钥签名,它就可以工作,如果我需要使用多个对称密钥进行签名,那么我将无法确定使用哪一个进行验证。
以下大致是我使用对称密钥的令牌生成器-
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 时如何指定孩子?的主要内容,如果未能解决你的问题,请参考以下文章