使用 JWT 在 c# 中生成令牌的无效签名

Posted

技术标签:

【中文标题】使用 JWT 在 c# 中生成令牌的无效签名【英文标题】:Invalid Signature for token generate in c# with JWT 【发布时间】:2019-07-14 20:16:46 【问题描述】:

我学会了使用 ASP.Net 核心生成令牌...

我有一个生成令牌验证的方法......这个

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJQYXR5IiwianRpIjoiY2Q5OGE3NjMtOGRkZC00NWM1LTg3MzAtMGE2MDBjZDE1NTg1IiwiZXhwIjoxNTUwNzE2OTQwLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjYzOTM5LyIsImF1ZCI6Imh0dHA6Ly9sb2NhbGhvc3Q6NjM5MzkvIn0.ndvWn-pBwdo7UlxFvuE0IPWnxpDtzAKTfq_FRkgMFeM

当你在 jwt.io 中粘贴令牌时,显示:无效签名, 但是令牌有值 user.... 为什么 jwt.io 显示此消息?

这个生成token的方法:

    public static string CreateToken(User user, string keyValue, string issuer)
    
        /* keyValue = "veryVerySecretKey" */
        /* issuer = "http://localhost:63939/" */

        var claims = new[] 
          new Claim(JwtRegisteredClaimNames.Sub, user.Name),
          new Claim(JwtRegisteredClaimNames.Jti, user.Id.ToString())
        ;



        var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(keyValue));

        var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

        var token = new JwtSecurityToken(issuer,
          issuer,
          claims,
          expires: DateTime.Now.AddMinutes(30),
          signingCredentials: creds);

        return new JwtSecurityTokenHandler().WriteToken(token);
    

【问题讨论】:

您是否将对称密钥粘贴到验证签名部分? 【参考方案1】:

当您使用 jwt.io 并将令牌粘贴到输入中时,始终显示“无效签名”。

这不是错误。您必须使用您的 keyValue 变量的值填写“your-256-bit-secret”字段。

【讨论】:

【参考方案2】:

在我的情况下,安全密钥小于 128 位,请尝试编写更长的密钥。

【讨论】:

以上是关于使用 JWT 在 c# 中生成令牌的无效签名的主要内容,如果未能解决你的问题,请参考以下文章

JWT nodejs / express - 无效签名

使用 jsonwebtoken 库生成的 JWT 令牌在 jwt.io 中提供了无效签名

PHP JWT 令牌无效签名

JWT 令牌的签名无效 - Azure + Spring Boot

为啥我的来自 Amazon Cognito 的 JWT 令牌具有无效签名?

即使我在授权中输入令牌,JWT 仍返回无效签名错误