不了解 JWT “加密”

Posted

技术标签:

【中文标题】不了解 JWT “加密”【英文标题】:Not understanding JWT "Encryption" 【发布时间】:2018-07-07 12:16:55 【问题描述】:

我已在 php 和 Angular 客户端中启动并运行 JWT。 一切都很完美。但我仍在尝试理解一些安全方面的问题,我的 Angular 客户端不知道用于加密服务器端 (PHP) 中 JWT 消息的密钥。 那么,为什么没有它可以解密呢? 钥匙不应该很重要吗?

【问题讨论】:

Key 仅用于验证 JWT 的签名,没有它您无法验证颁发者的身份(但可以假设它是有效的并忽略这个事实)。 所以关键告诉客户端(角度),“这个答案是我提供的,PHP客户端”? 不,它只是完全跳过验证发行者和令牌的完整性。 【参考方案1】:

JWT 可以是签名的、加密的或两者兼有。如果一个令牌是签名的,但没有加密,每个人都可以读取令牌的内容,但是当你不知道私钥时,你无法更改它。否则,接收方会注意到签名不再匹配。

另外:您可以转到jwt.io,粘贴您的令牌并阅读内容。起初这让很多人感到不安。

简短的回答是 JWT 不关心加密。它关心验证。也就是说,它总能得到“这个令牌的内容是否被操纵”的答案?这意味着用户对 JWT 令牌的操作是徒劳的,因为服务器会知道并忽略令牌。服务器在向客户端发出令牌时,会根据有效负载添加签名。稍后它会验证有效负载和匹配的签名。

请阅读 belove 链接了解更多信息。

jwt.io/introduction

en.wikipedia.org/wiki/JSON_Web_Token

【讨论】:

我还不清楚,那么,我的令牌呢?我从 GitHub 下载了 JWT 并添加到我的项目中,并且简单明了,用我的消息和我的 $key 定义了 $token,并写了 $jwt = JWT::encode($token, $key); 我的令牌加密了吗?我怎么知道? @UrielChami 请检查我的附加答案 一个 JWS 有 2 个点 (.) 而一个 JWE 有 4 个

以上是关于不了解 JWT “加密”的主要内容,如果未能解决你的问题,请参考以下文章

基于Token的身份验证——JWT

基于Token的身份验证——JWT(转)

了解 Web 身份验证上下文中的 JSON Web 令牌 (JWT)

了解 Web 身份验证上下文中的 JSON Web 令牌 (JWT)

微服务网关鉴权:gateway使用网关限流使用用户密码加密JWT鉴权

微服务网关鉴权:gateway使用网关限流使用用户密码加密JWT鉴权