为什么我不能使用 SHA256 创建 jwt 令牌?
Why can't I create a jwt token with SHA256?
我是第一次实现基于 JWT 的身份验证,并且我的实现基于我在网上找到的一些资源。
我想知道,我对 jwt 的秘密定义为:
"JwtConfig": {
"secret": "pma_secret_2019_2020",
"durationInMinutes": 1440,
"issuer": "localhost:5001"
}
现在这段代码有问题:
var symmetricKey = new SymmetricSecurityKey(
Encoding.UTF8.GetBytes(_secret)
);
var signinCredentials =
new SigningCredentials(symmetricKey, SecurityAlgorithms.Sha256);
var expirationDate = DateTime.Now.AddMinutes(_durationInMinutes);
var tokenDescriptor = new SecurityTokenDescriptor
{
Subject = new ClaimsIdentity(claims),
Expires = expirationDate,
SigningCredentials = signinCredentials
};
var tokenHandler = new JwtSecurityTokenHandler();
var token = tokenHandler.CreateToken(tokenDescriptor);
创建令牌抛出以下异常:
System.NotSupportedException: IDX10634: Unable to create the SignatureProvider.
Algorithm: 'System.String', SecurityKey: 'Microsoft.IdentityModel.Tokens.SymmetricSecurityKey'
is not supported.
有人可以解释为什么我总是收到这个错误吗?
它与秘密的大小或它的字符或其他什么有关吗?
当算法更改为 HmacSHA256 时,代码有效。但我想了解为什么它不适用于 SHA256。
改变
安全算法.Sha256
到
安全算法.HmacSha256Signature
SHA256只是一种哈希算法,不提供签名机制。这就是 HMAC 出现在正确选项中的原因。
我是第一次实现基于 JWT 的身份验证,并且我的实现基于我在网上找到的一些资源。 我想知道,我对 jwt 的秘密定义为:
"JwtConfig": {
"secret": "pma_secret_2019_2020",
"durationInMinutes": 1440,
"issuer": "localhost:5001"
}
现在这段代码有问题:
var symmetricKey = new SymmetricSecurityKey(
Encoding.UTF8.GetBytes(_secret)
);
var signinCredentials =
new SigningCredentials(symmetricKey, SecurityAlgorithms.Sha256);
var expirationDate = DateTime.Now.AddMinutes(_durationInMinutes);
var tokenDescriptor = new SecurityTokenDescriptor
{
Subject = new ClaimsIdentity(claims),
Expires = expirationDate,
SigningCredentials = signinCredentials
};
var tokenHandler = new JwtSecurityTokenHandler();
var token = tokenHandler.CreateToken(tokenDescriptor);
创建令牌抛出以下异常:
System.NotSupportedException: IDX10634: Unable to create the SignatureProvider.
Algorithm: 'System.String', SecurityKey: 'Microsoft.IdentityModel.Tokens.SymmetricSecurityKey'
is not supported.
有人可以解释为什么我总是收到这个错误吗? 它与秘密的大小或它的字符或其他什么有关吗?
当算法更改为 HmacSHA256 时,代码有效。但我想了解为什么它不适用于 SHA256。
改变 安全算法.Sha256 到 安全算法.HmacSha256Signature
SHA256只是一种哈希算法,不提供签名机制。这就是 HMAC 出现在正确选项中的原因。