首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果库这样说,那么假设JWT是有效的,安全吗?

如果库这样说,那么假设JWT是有效的,安全吗?
EN

Security用户
提问于 2020-03-08 05:56:57
回答 1查看 188关注 0票数 1

这是我第一次使用JWT。我正在按指示使用jwcrypto库,我使用的密钥是我用OpenSSL生成的一个RSA密钥。

我最初的倾向是将JWT与用户的行一起存储在数据库中,然后在每次请求时根据数据库验证令牌的声明。

但是我突然想到,令牌有效负载是用我服务器的私钥签名的。

假设我的私钥从未被泄露过,那么是否可以安全地假设JWT中包含的所有数据(由用户表示为比勒令牌)都是防篡改的?我知道第三方可能会读到它,因为我没有加密。

我想知道的是,除了解密用户的JWT并让库告诉我有什么问题之外,我还需要做些什么来验证它吗?

EN

回答 1

Security用户

回答已采纳

发布于 2020-03-08 09:55:13

验证JWT的方法是检查它的算法、签名、过期和发行者。其他索赔也可以核实。

签名

对于RS256,auth服务器将计算头部和有效负载的SHA256散列,并使用其私钥对其进行签名。要验证签名,依赖方再次计算头和有效负载的散列,并检查它是否匹配用公钥解密的签名。

由于头部和有效载荷没有加密,所以可以对它们进行篡改,但这样就无法匹配签名。

算法

当服务器不检查"alg"字段[1]时,可能存在两个严重的漏洞。这是因为一些JWT库使用报头中提供的算法自动验证签名。

首先,如果黑客发送alg等于none的JWT,则不会检查签名。

其次,一些错误的库实现将对称密钥和非对称公钥存储在同一个变量中。如果您已经存储了一个RSA公钥,需要一个非对称算法,并且黑客发送了一个带有对称签名算法的JWT,那么您的服务器将检查JWT是否用公钥签名。因为黑客可以访问公钥,所以他们可以很容易地创建有效的JWT签名。

有效载荷索赔

JWT库将检查当前发布时间iat和到期时间exp之间的时间。与检查exp不同,有些人更愿意检查当前的时间比发布的时间短,加上最大可接受的JWT生存期。

发行人iss应与预期的发行人相匹配。

1:https://auth0.com/blog/critical-vulnerabilities-in-json-web-token-libraries

2:https://auth0.com/docs/tokens/guides/validate-jwts

票数 3
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/227014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档