从spring-boot调用一个安全的restapi



我有一个spring-boot应用程序,需要调用一个安全的外部api来检索数据。

在下面我遵循的步骤:

  1. 我使用用户名和密码生成令牌

  2. 我将令牌保存在临时变量中

  3. 我在每个resttemplate调用上都使用它

    headers.add("Authorization","Bearer"+token(

我的问题是:

  • 保留生成的令牌并为每个连接的用户使用它的最佳方式是什么
  • 我们可以配置spring-security来管理对外部api的调用吗

正如我所说,您希望代理一个安全的rest api并响应您自己的用户。但是安全api需要身份验证,并且您希望每个用户都有一个特定的jwt。有两种方法可以实现:

1-使用像Redis这样的内存内令牌存储,并启用持久性模式,以实现可靠性和可扩展性。遵循以下步骤:[对于每个用户,检查令牌是否已经生成并存储在存储中]->[如果是,获取并分配给restTemplate请求的头]->[如果没有从安全api获取令牌并存储它,然后从第一步开始重新启动]

提示:您可以通过会话或oauth]识别每个用户

2-以前的解决方案不是最好的做法,因为你应该有内存存储,这将是你的瓶颈。(您应该对其进行集群并垂直增加资源(。因此,下一个解决方案是在客户端为每个用户存储令牌。您应该遵循以下步骤:[如果您自己的用户将令牌发送到您的rest api,您应该捕获它,验证它,并使用restTemplate转发到安全api]->[否则,这意味着你还没有将令牌发送给用户,所以你应该获取令牌RESIGN并响应用户]

提示:您应该放弃安全算法从安全api中提取的jwt令牌,因为令牌被发送到客户端,令牌的内容可能存在一些漏洞

第二个解决方案是忘记内存数据库,它的IO/绑定增加了灵活性。但它在您的jwt令牌上添加了一个cpu绑定的进程。每个用户都将其令牌存储在浏览器中,您可以使用令牌来识别用户,而不是使用会话或类似的东西。因此,我强烈建议您阅读有关签名算法的文章,如sha(2565121024(或其他类型的算法。

最新更新