我在后端验证jwt令牌,其中令牌可以从具有不同密钥和算法的多个源发出。
之前我只使用RsaSha256
密钥验证,现在我正在设置接受使用HmacSha256
签名的令牌。
问题是 - 在验证令牌时,我曾经查看过kid值来解析证书/安全密钥。但使用HmacSha256
生成的令牌不包含孩子值。
我目前正在检查kid == null
委托中的IssuerSigningKeyResolver
以确定应使用哪个密钥进行验证(如果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
来生成和验证令牌。
答案 0 :(得分:0)
我刚才在寻找相同的东西。 只需在构造SymmetricSecurityKey时添加KeyId。
SigningCredentials = new SigningCredentials(
new SymmetricSecurityKey(symmetricKey) { KeyId = "Your Key Id" },
SecurityAlgorithms.HmacSha256
)