HmacSha512只使用一个密钥来签名或验证令牌,尝试像RsaSha256这样的算法进行公钥/私钥加密。
最后我找到了答案:
var claims = new Claim[] { new SomeClaimes() }; var scKey = Encoding.UTF8.GetBytes("SOME KEY"); var ecKeyTemp = Encoding.UTF8.GetBytes("SOME OTHER KEY"); // Note that the ecKey should have 256 / 8 length: byte[] ecKey = new byte[256 / 8]; Array.Copy(ecKeyTemp, ecKey, 256 / 8); var tokenDescriptor = new SecurityTokenDescriptor { Subject = new ClaimsIdentity(claims), SigningCredentials = new SigningCredentials( new SymmetricSecurityKey( scKey), SecurityAlgorithms.HmacSha512), EncryptingCredentials = new EncryptingCredentials( new SymmetricSecurityKey( ecKey), SecurityAlgorithms.Aes256KW, SecurityAlgorithms.Aes256CbcHmacSha512), Issuer = "My Jwt Issuer", Audience = "My Jwt Audience", IssuedAt = DateTime.UtcNow, Expires = DateTime.Now.AddDays(7), }; var tokenHandler = new JwtSecurityTokenHandler(); var token = tokenHandler.CreateJwtSecurityToken(tokenDescriptor); var jwt = tokenHandler.WriteToken(token);
如你所见,使用 SecurityAlgorithms.Aes256KW 作为 密钥加密算法 和 SecurityAlgorithms.Aes256CbcHmacSha512 作为 加密演算法 会做的。请注意,用于加密算法的密钥应具有 256 / 8 长度。
SecurityAlgorithms.Aes256KW
SecurityAlgorithms.Aes256CbcHmacSha512
256 / 8