【发布时间】: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 来生成和验证令牌。
【问题讨论】: