javascript - 使用 System.IdentityModel.Tokens.Jwt 验证在 C# 中生成的 token

标签 javascript c# reactjs jwt

我已经使用 C# 在我的 web api 中创建了一个这样的 token 。

 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 时,我得到了 token ,但无法使用相同的 key 验证它。 我收到错误无效签名。 我正在使用 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 中的 token 是否仍然有效以保持用户登录。

感谢任何帮助。

最佳答案

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

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

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

关于javascript - 使用 System.IdentityModel.Tokens.Jwt 验证在 C# 中生成的 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48907726/

相关文章:

C# 情感分析

c# - 串行端口 ping 功能

javascript - React Native TextInput 不让我输入

javascript - CSS 将文本置于图像之上

javascript - CSS3 transform + jQuery 翻转卡问题

javascript - 整个文档克隆在 JavaScript 中不起作用

javascript - 目标 ="_blank"无法打开新窗口

c# - Diskpart UniqueID - C# 如何获取该 ID

javascript - React-router 如何通过 props 将参数传递给其他组件?

javascript - 如何使用 React 应用程序将 ASP.NET Core Controller 操作 View 之一访问到 iframe 中?