首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JWT -非对称加密

JWT -非对称加密
EN

Stack Overflow用户
提问于 2020-02-18 16:10:23
回答 1查看 968关注 0票数 1

我有三个服务器:-授权服务器- api服务器-前端服务器

授权服务器返回JWT自包含访问令牌(+刷新令牌)。JWT不存储在授权服务器中的任何位置。我想用非对称加密保护JWT,我不确定我的想法是否正确。让我来描述一下流程:

  1. 从Fronted Server登录后,授权服务器获取用户凭据,然后生成JWT令牌并使用公钥对其进行编码。
  2. Fronted Server接收加密的JWT令牌,客户端(web浏览器)将其保存为HTTP专用cookie。
  3. 客户端向安全资源发送请求,因此FrontEnd基于获得的编码JWT令牌,请求安全数据API。
  4. 基于安全JWT和私钥解密值的API,并检查用户是否有足够的权限执行操作。
  5. 如果JWT令牌过期,前端会向具有刷新令牌的授权服务器发送请求,以获得新的JWT令牌。

在这种情况下,授权服务器和API服务器需要存储用于解密的私钥。这个解决方案够安全吗?在两个服务器中存储相同的私钥可以吗?你知道流程是否正确吗?或者数据流应该是不同的?

EN

回答 1

Stack Overflow用户

发布于 2020-02-19 19:56:05

我想用非对称加密保护JWT,我不确定我的想法是否正确。

一般来说,数据加密是个好主意。尤其是当您传输敏感数据时。

让我描述一下flow…在这种情况下,授权服务器和API服务器需要存储用于解密的私钥。这个解决方案够安全吗?在两个服务器中存储相同的私钥可以吗?你知道流程是否正确吗?或者数据流应该是不同的?

如果我正确理解您的流程,令牌将在授权服务器端加密,并在API服务器端解密。因此,您希望阻止客户端读取其内容。

这种流动是绝对好的。AS和API服务器都将具有共享的秘密,以便它们能够加密或解密令牌。

我建议您阅读更多关于JWE (加密的JWT)和相关的RFC7516的内容。此规范描述了加密令牌的标准方法。根据您使用的编程语言,您可能会发现支持JWE的库。https://jwt.io/列出了许多库,其中一些支持比签名令牌(JWS)更多。例如,Com.尼姆布兹/尼姆布斯-何塞-jwt (Java)或web-令牌/jwt-框架 (PHP)。

可能的流程如下所示。请不要认为它无疑会在您的AS和API服务器代码中造成复杂性。因此,在实现它之前,应该确保加密令牌!(例如,传输敏感数据)是必要的。

  • 使用其私钥(例如,算法RSxxx、PSxxx或ESxxx)对令牌进行=> JWS签名
  • JWS按照RFC7516加密,使用非对称加密算法(例如AxxxKW或AxxxGCMKW)和共享密钥=>嵌套令牌(JWE中的JWS )。
  • 嵌套令牌被发送到客户端。
  • 客户端无法读取内容,但令牌可以像往常一样发送到API服务器。
  • API服务器用共享密钥解密JWE以获得JWS
  • API服务器使用AS公钥验证JWS。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60285098

复制
相关文章

相似问题

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