安全性问题:根据https://auth0.com/blog/2015/03/31/critical-vulnerabilities-in-json-web-token-libraries/的说法,很多JWT库都使用令牌本身来确定签名算法。
这是我们的用例:我们希望创建一个登录机制,用硬凭据(用户名/密码)验证用户,然后返回一个JWT令牌,例如3天的生存期。令牌应该包含用户名,签名应该保证令牌不会被“伪造”。
我们可以在Web / MVC 6中使用什么库?为了避免漏洞,必须在解码时指定签名算法。
如果可能的话,我们希望避免集成复杂的OAuth组件。
发布于 2015-08-06 14:34:18
我正在使用System.IdentityModel.Tokens.Jwt库,我只是检查了这个问题。我生成了一个令牌,并在我的一个测试中验证了它,然后删除了将alg更改为none的signingCredentials。使用"alg":"none"生成的JWT验证失败。
下面是我如何生成令牌:
public string GenerateToken(SSOContext context, SignatureSettings settings)
{
var token = new JwtSecurityToken(
issuer: "MyIssuer",
audience: "MyAudience",
claims: GetClaims(context),
//comment the below line to generate a 'none' alg
signingCredentials: new X509SigningCredentials(settings.Certificate),
notBefore: DateTime.UtcNow,
expires: DateTime.UtcNow.AddHours(1)
);
return new JwtSecurityTokenHandler().WriteToken(token);
}当我验证令牌时,我会得到消息中预期的异常。
IDX10504:无法验证签名,令牌没有签名:
https://stackoverflow.com/questions/31170683
复制相似问题