JwtSecurityToken的理解和异常

时间:2018-10-01 09:36:35

标签: asp.net .net asp.net-core jwt

我对JwtSecurityTokens并不陌生,我尝试了解它的不同方面,并进一步了解整个claimsidentityclaimprincipal,但这是另一个故事。

我尝试使用以下代码在 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隐藏]”。

感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

算法HS256要求SecurityKey.KeySize大于128位,并且您的密钥只有48位。通过添加至少10个符号来扩展它。 至于“ PII隐藏”部分,这是GDPR合规性工作的一部分,以隐藏日志中的任何堆栈或变量信息。您应通过以下方式启用其他详细信息:

IdentityModelEventSource.ShowPII = true;

答案 1 :(得分:0)

您应该为秘密密钥添加足够的字符。当您在此处设置密钥时,

//your SECRET_KEY = "abcdef"
new SymmetricSecurityKey(Encoding.UTF8.GetBytes(SECRET_KEY));

将其更改为

new SymmetricSecurityKey(Encoding.UTF8.GetBytes("somethingyouwantwhichissecurewillworkk"));

这应该有效。