签名证书 jwt asp.net 核心中的密钥长度应该是多少

Posted

技术标签:

【中文标题】签名证书 jwt asp.net 核心中的密钥长度应该是多少【英文标题】:what should be the key length in signingCredentials jwt asp.net core 【发布时间】: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 被隐藏]''

【问题讨论】:

您可能想阅读this article on Cryptography和this article on Security。 但我还是不明白为什么它应该是最小 128 位。 【参考方案1】:

来自微软文档:

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

【讨论】:

【参考方案2】:

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

示例:

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

【讨论】:

【参考方案3】:

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

【讨论】:

这是正确的答案

以上是关于签名证书 jwt asp.net 核心中的密钥长度应该是多少的主要内容,如果未能解决你的问题,请参考以下文章

检索 JWT 身份验证的证书/密钥时出现问题。 (节点/Express/C#/IdentityServer)

如何使用对称密钥配置 Microsoft JWT?

如何使用对称密钥配置 Microsoft JWT?

asp.net 核心中的 jwt 令牌无效

uri查询参数中的asp.net核心JWT?

asp.net 核心中的 JWT 身份验证验证