【问题标题】:Verify Token generated in C# with System.IdentityModel.Tokens.Jwt使用 System.IdentityModel.Tokens.Jwt 验证在 C# 中生成的令牌
【发布时间】:2018-08-01 03:23:30
【问题描述】:

我用 C# 在我的 web api 中创建了一个这样的令牌。

 private const string Secret = "someSecretKey";

        public static string GenerateToken(AuthModel user, int expireMinutes = 20)
        {
            var symmetricKey = Convert.FromBase64String(Secret);
            var tokenHandler = new JwtSecurityTokenHandler();

            var now = DateTime.UtcNow;
            var tokenDescriptor = new SecurityTokenDescriptor
            {
                Subject = new ClaimsIdentity(new[]
                        {
                            new Claim(ClaimTypes.Name, user.Username),
                            new Claim(ClaimTypes.Role, ((Roles)user.RoleId).ToString()),
                            new Claim("guid",user.Guid)
                        }),

                Expires = now.AddMinutes(Convert.ToInt32(expireMinutes)),

                SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(symmetricKey), SecurityAlgorithms.HmacSha256Signature)
            };

            var stoken = tokenHandler.CreateToken(tokenDescriptor);
            var token = tokenHandler.WriteToken(stoken);

            return token;
        }

当我使用 reactjs 应用程序的 API 时,我得到了令牌,但无法使用相同的密钥验证它。 我收到错误无效签名。 我正在使用 jsonwebtoken npm 包,

   import jwt from 'jsonwebtoken';
jwt.verify(token, keys.jwtSecret, async (err) => { 
      if (err) {
        //console.log('Token expired at: ', err.expiredAt)
        console.log("error", err)
      }
      else {
        dispatch(login(token));
      }
    });

我从来没有打过那个dispatch(login(token))。我正在使用它来检查保存在localStorage 中的令牌是否仍然有效以保持用户登录。

感谢任何帮助。

【问题讨论】:

    标签: javascript c# reactjs jwt


    【解决方案1】:

    我找到了解决方案。不能只将secretKey 推入jwt.verify(token,secretKey); 这不起作用,因为某些base64 encoding/decoding 算法。我要做的是首先从我的秘密中制作一个缓冲区,例如:

    const secret = new Buffer("myTokeSecretString", "base64");
    

    然后将 secret 传递给 verify 方法,它就可以工作了。

    【讨论】:

      猜你喜欢
      • 2013-09-11
      • 2019-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-21
      相关资源
      最近更新 更多