什么是signingCredentials jwt asp.net核心中的密钥长度

时间:2018-09-03 16:24:47

标签: c# jwt

 public static string GenerateToken(string Username)
    {
        var claimsdata = new[] { new Claim(ClaimTypes.Name, Username) };
        var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("qwertyuioplkjhgfdsazxcvbnmqwertlkjfdslkjflksjfklsjfklsjdflskjflyuioplkjhgfdsazxcvbnmmnbv"));
        var signInCred = new SigningCredentials(key, SecurityAlgorithms.HmacSha384Signature);
        var token = new JwtSecurityToken(
            issuer: "mysite",
            audience: "mysite",
            expires: DateTime.Now.AddMinutes(60),
            claims: claimsdata,
            signingCredentials: signInCred
            );
        var tokenString = new JwtSecurityTokenHandler().WriteToken(token);
        return tokenString;
    }

//密钥的长度为88个字符。如果我将其减少到少于16个字符,则会出现异常:

  

System.ArgumentOutOfRangeException:'IDX10603:解密失败。   尝试过的键:“ [PII隐藏]”。捕获到异常:“ [PII隐藏]”。   令牌:“ [PII隐藏]”

3 个答案:

答案 0 :(得分:7)

sha256中的最小长度为16个字符,因为它们是256个十六进制位,则256/16 = 16

答案 1 :(得分:0)

对于.NET / .NET Core,密钥Secret Key至少应为128位,即16个字节

示例:

"JwtToken": {
    "SecretKey": "minimumSixteenCharacters",
    "Issuer": "https://localhost:44378"
  }

答案 2 :(得分:0)

来自微软文档:

enter image description here

所以我认为如果你使用的少于这个一旦转换为字节,它应该用 0 填充。