繁体   English   中英

从 spring 引导调用安全 Rest api

[英]Call a secure Rest api from spring boot

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

在下面我遵循的步骤:

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

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

  3. 我在每个 resttemplate 调用中使用它

     headers.add("授权", "承载" + token);

我的问题是:

  • 保留生成的令牌并将其用于每个连接的用户的最佳方法是什么?
  • 我们可以配置 spring 安全性来管理对外部 api 的调用吗?

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

1- 使用内存令牌存储,如 Redis,启用持久性模式以实现可靠和可扩展。 请按照以下步骤操作:[为每个用户检查令牌是否已经生成并存储在存储中] -> [如果是,则获取并将其分配给 restTemplate 请求的 header] -> [如果没有从安全 API 获取令牌并存储它并从第一步开始重新开始]

提示:您可以通过 session 或 oauth 来识别您的每个用户]

2-以前的解决方案不是最佳实践,因为您应该有内存存储,这将是您的瓶颈。 (您应该将其集群并垂直增加资源)。 所以下一个解决方案是在客户端为每个用户存储令牌。 您应该按照以下步骤操作:[如果您自己的用户将令牌发送到您的 rest api,您应该抓住它,验证它,然后使用 restTemplate 转发到安全 API] -> [否则这意味着您还没有发送令牌给用户,因此您应该获取令牌 RESIGN 并回复用户]

提示:你应该放弃你的安全算法从secure-api获取的jwt-token,因为token被发送到客户端并且token的内容可能有一些漏洞

第二种解决方案是忘记 In-Memory db,它的 IO/bound 增加了延迟。 但它会在您的 jwt 令牌上添加一个 CPU 绑定进程。 每个用户都将其令牌存储在浏览器中,您可以使用令牌来识别您的用户,而不是使用会话或类似的东西。 因此,我强烈建议您阅读有关签名算法的信息,例如 sha(256,512,1024) 或其他一些类型的算法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM