我有三台服务器:-授权服务器-API服务器-前端服务器
授权服务器返回JWT独立访问令牌(+刷新令牌)。 JWT不会存储在Authorization Server中的任何位置。我想通过非对称加密来保护JWT,但我不确定我的想法是否正确。让我描述一下流程:
在这种情况下,授权服务器和API服务器将需要存储私钥以进行解密。此解决方案是否足够安全?是否可以在两个服务器中存储相同的私钥?你知道流量是否正确吗?还是数据流应该不同?
我想用非对称加密保护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服务器代码中增加复杂性。因此,在实施它之前,应确保有必要对令牌进行加密!(例如,您传输敏感数据)
TLS加密对于Oauth2是必需的,因此JWT在传输过程中已加密。 Oauth2比Oauth 1.0简单得多,因为现在需要TLS。好像您想要在Oauth2之上实现其他加密一样,就像以前的版本一样。我使用过的授权服务器Keycloak和IdentityServer4不支持这种附加加密。您应该坚持常规做法,在安全性方面更是如此。