【发布时间】: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