JWT-非对称加密

JWT-非对称加密,jwt,encryption-asymmetric,Jwt,Encryption Asymmetric,我有三台服务器: -授权服务器 -api服务器 -前端服务器 授权服务器返回JWT自包含访问令牌(+刷新令牌)。JWT不存储在授权服务器中的任何位置。 我想用非对称加密保护JWT,但我不确定我的想法是否正确。 让我描述一下流程: 从前端服务器登录后,授权服务器获取用户凭据,然后生成JWT令牌并使用公钥对其进行编码 前置服务器接收加密的JWT令牌,客户端(web浏览器)将其保存为仅HTTP cookie 客户端向安全资源发送请求,所以前端基于获得的编码JWT令牌,请求安全数据API服务器 API服

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

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

  • 从前端服务器登录后,授权服务器获取用户凭据,然后生成JWT令牌并使用公钥对其进行编码
  • 前置服务器接收加密的JWT令牌,客户端(web浏览器)将其保存为仅HTTP cookie
  • 客户端向安全资源发送请求,所以前端基于获得的编码JWT令牌,请求安全数据API服务器
  • API服务器基于安全JWT和私钥解密值,并检查用户是否有足够的权限执行操作
  • 若JWT令牌过期,前端向授权服务器发送请求,请求使用刷新令牌获取新的JWT令牌 在这种情况下,授权服务器和API服务器需要存储用于解密的私钥。 这个解决方案足够安全吗?在两台服务器中存储相同的私钥可以吗? 你知道流量是否正确吗?或者数据流应该有所不同

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

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

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

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

    这个流程绝对不错。AS和API服务器都将拥有共享密钥,以便能够加密或解密令牌

    我建议您阅读更多关于JWE(加密JWT)及其相关应用程序的信息。本规范描述了加密令牌的标准方法。 根据您使用的编程语言,您可能会发现支持JWE的库。列出了许多库,其中一些库支持的不仅仅是签名令牌(JW)。例如(Java)或(PHP)

    可能的流程如下所示请不要担心这无疑会给AS和API服务器代码带来复杂性。因此,在您实现它之前,您应该确保有必要加密您的令牌(例如,您传输敏感数据)

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

    通常令牌的内容不是秘密,但您希望保证它是由授权服务器生成的。这将指向签名而不是加密,并且只有授权服务器应该具有签名密钥。我强烈建议使用现有组件,而不是尝试自己在这里滚动某些内容。例如,如果您在基于.NET的堆栈中,Identity Server可能是一个选项。不幸的是,我无法继续使用标准方法。无论如何,如果您的身份验证服务器对令牌进行签名,那么后端验证签名的可能性有多大?当您使用非对称算法进行签名时,私钥用于签名,公钥用于验证。不需要共享私钥,只有身份验证服务器知道私钥。那么,在不解密整个令牌的情况下,后端服务器如何知道什么是用户权限?