我一直在尝试使用简单的 key 创建并签名JwtSecurityToken。经过大量研究,似乎我发现的所有示例都使用了InMemorySymmetricSecurityKey类,但不幸的是,该类似乎在System.IdentityModel库的最新版本中不存在。
这些是我正在使用的依赖项:
"System.IdentityModel.Tokens": "5.0.0-rc1-211161024",
"System.IdentityModel.Tokens.Jwt": "5.0.0-rc1-211161024"
我也尝试使用它的基类SymmetricSecurityKey,但随后在尝试创建 token 时收到以下异常:
"Value cannot be null.\r\nParameter name: IDX10000: The parameter 'signatureProvider' cannot be a 'null' or an empty object."
这是引发异常的代码:
public static string CreateTokenHMAC()
{
HMACSHA256 hmac = new HMACSHA256(Convert.FromBase64String("test"));
var key = new SymmetricSecurityKey(hmac.Key);
var signingCredentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256Signature);
JwtSecurityToken token = _tokenHandler.CreateJwtSecurityToken(new SecurityTokenDescriptor()
{
Audience = AUDIENCE,
Issuer = ISSUER,
Expires = DateTime.UtcNow.AddHours(6),
NotBefore = DateTime.Now,
Claims = new List<Claim>()
{
new Claim(ClaimTypes.Email, "[email protected]")
},
SigningCredentials = signingCredentials
});
return _tokenHandler.WriteToken(token);
}
这是我第一次使用JwtSecurityToken,所以我的猜测是我可能在某处缺少了一步
最佳答案
我设法达到完全相同的异常(exception)。我通过另一种方式生成 key 来解决该问题:
RSAParameters keyParams;
using (var rsa = new RSACryptoServiceProvider(2048))
{
try
{
keyParams = rsa.ExportParameters(true);
}
finally
{
rsa.PersistKeyInCsp = false;
}
}
RsaSecurityKey key = new RsaSecurityKey(keyParams);
var signingCredentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256Signature);
这是token-based authentication on ASP.NET 5 RC1撰写的有关Mark Hughes的精彩文章
关于c# - dnx451 RC1 InMemorySymmetricSecurityKey发生了什么情况?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35463289/