我对JwtSecurityTokens
还是很陌生,我尝试了解它的不同方面,并进一步了解整个claimsidentity
和claimprincipal
,但这是另一个故事。
我尝试通过使用以下代码在C#中生成令牌:
private const string SECRET_KEY = "abcdef";
private static readonly SymmetricSecurityKey SIGNING_KEY = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(SECRET_KEY));
public static string GenerateToken(string someName)
{
var token = new JwtSecurityToken(
claims: new Claim[]
{
new Claim(ClaimTypes.Name, someName),
},
notBefore: new DateTimeOffset(DateTime.Now).DateTime,
expires: new DateTimeOffset(DateTime.Now.AddMinutes(60)).DateTime,
signingCredentials: new SigningCredentials(SIGNING_KEY, SecurityAlgorithms.HmacSha256)
);
return new JwtSecurityTokenHandler().WriteToken(token);
}
我遵循了有关YouTube的教程,但不确定我是否了解
JwtSecurityToken中的不同部分。另外,当我执行
通过控制器的代码只是试图返回令牌,它
返回错误,说:“ IDX10603:解密失败。尝试过的密钥:
“ [PII隐藏]”。
任何帮助表示赞赏。
最佳答案
HS256算法要求SecurityKey.KeySize
大于128位,并且您的密钥只有48位。通过添加至少10个符号来扩展它。
至于“ PII隐藏”部分,这是GDPR合规性工作的一部分,以隐藏日志中的任何堆栈或变量信息。您应通过以下方式启用其他详细信息:
IdentityModelEventSource.ShowPII = true;
关于asp.net - JwtSecurityToken的理解和异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52588240/