JWT-非对称加密

问题描述 投票:0回答:2

我有三台服务器:-授权服务器-API服务器-前端服务器

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

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

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

jwt encryption-asymmetric
2个回答
1
投票

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

通常,数据加密是个好主意。特别是如果您传输敏感数据。

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

[如果我正确理解您的流程,则令牌将在AS(授权服务器)端进行加密,并在API服务器端进行解密。因此,您要防止客户端读取其内容。

此流程绝对正确。 AS和API服务器都将拥有共享的机密,以便它们能够加密或解密令牌。

我建议您阅读有关JWE(加密的JWT)及其关联的RFC7516的更多信息。本规范描述了一种加密令牌的标准方法。根据您使用的编程语言,您可能会发现支持JWE的库。 https://jwt.io/列出了许多库,其中一些库不仅仅支持签名令牌(JWS)。例如com.nimbusds/nimbus-jose-jwt(Java)或web-token/jwt-framework(PHP)。

可能的流程如下。 请注意,这无疑会在您的AS和API服务器代码中增加复杂性。因此,在实施它之前,应确保有必要对令牌进行加密!(例如,您传输敏感数据)

  • AS用其私钥(例如算法RSxxx,PSxxx或ESxxx)对令牌进行签名=> JWS
  • [JWS根据RFC7516使用非对称加密算法(例如AxxxKW或AxxxGCMKW)和共享密钥=>嵌套令牌(JWE中的JWS)进行了加密]
  • 嵌套令牌已发送到客户端
  • 客户端无法读取内容,但是令牌可以照常发送到API服务器
  • API服务器使用共享密钥解密JWE以获取JWS
  • API服务器使用AS公钥验证JWS

0
投票

TLS加密对于Oauth2是必需的,因此JWT在传输过程中已加密。 Oauth2比Oauth 1.0简单得多,因为现在需要TLS。好像您想要在Oauth2之上实现其他加密一样,就像以前的版本一样。我使用过的授权服务器Keycloak和IdentityServer4不支持这种附加加密。您应该坚持常规做法,在安全性方面更是如此。

© www.soinside.com 2019 - 2024. All rights reserved.