【问题标题】:what should be the key length in signingCredentials jwt asp.net core签名证书 jwt asp.net 核心中的密钥长度应该是多少
【发布时间】:2019-02-08 17:30:49
【问题描述】:
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 被隐藏]'。 token: '[PII 被隐藏]''

【问题讨论】:

标签: c# asp.net-core jwt


【解决方案1】:

来自微软文档:

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

【讨论】:

    【解决方案2】:

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

    示例:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 这是正确的答案
      猜你喜欢
      • 2017-06-24
      • 1970-01-01
      • 1970-01-01
      • 2013-11-10
      • 1970-01-01
      • 2020-05-15
      • 1970-01-01
      • 2020-08-07
      • 2019-07-29
      相关资源
      最近更新 更多