【问题标题】:Spring boot Client to invoke REST API secured by OAuth2Spring boot Client 调用由 OAuth2 保护的 REST API
【发布时间】:2020-08-27 19:00:40
【问题描述】:

我正在尝试在春季编写一个客户端,该客户端将调用由 OAuth2 保护的 REST api。 我有以下内容,可用于从 Auth Server 获取令牌,然后调用资源服务器。 客户端 ID、客户端密码、用户名、密码和访问令牌 URL(从中获取令牌的 URL)和资源 URL。 我如何在 Spring Boot 中编写具有上述信息的客户端,以便我可以调用资源服务器 URL 来获取我的资源或执行 POST。 在我获得在 ms(TTL) 中具有生存时间的访问令牌后,我如何缓存它,这样我就不必为每个请求生成令牌。缓存令牌好不好?

【问题讨论】:

    标签: java spring-boot spring-security


    【解决方案1】:

    你可以使用声明式的 rest 客户端 - feign spring-cloud-starter-openfeign

    用于使用服务和缓存Spring cache 以缓存访问令牌。

    提示:调用访问令牌并将其缓存并在后续调用中恢复它。 一旦端点抛出未经授权的异常或者token失效,那么feign客户端中的重试机制就可以再次调用。要实现重试,您需要将“spring-retry”作为依赖项之一。

    【讨论】:

      【解决方案2】:

      如果您使用的是 JWT 令牌,则生存时间编码在令牌中。

      • 您可以将其存储在本地存储中
      • 您可以将其存储为 cookie
      • 您可以将其存储在浏览器会话中
      • 您可以实现任意存储令牌的方式

      在哪里提供令牌取决于您。 它可以处于通信的任何阶段(请求参数、标头、按需)。

      【讨论】:

      • 谢谢,在这种情况下我没有获得 JWT 令牌
      【解决方案3】:

      我建议使用 CloseableHttpClient 进行如下操作

      1. 将 clientID、用户凭据、访问令牌等详细信息放在 Http 调用的标头中
      2. 使用 CloseableHttpClient 类 -> 执行方法并将标头与 URL 一起传递。
      3. 解析响应并提取详细信息

      4. 使用 @Sivaraj 提到的 Spring 缓存存储检索到的令牌,或者您可以使用表来存储该值以及时间戳,并获取该值以供下次调用。

      【讨论】:

      • 感谢古拉布。有没有我可以通过的例子。我想我可以选择这个选项。如果可能,请提供样品。谢谢
      • 您好@AJK1305,是的,您可以查看以下链接,除了缓存部分外,这些都符合您的要求。 linklinklink
      猜你喜欢
      • 2020-07-29
      • 2020-10-31
      • 2018-08-11
      • 2018-03-19
      • 2016-02-23
      • 1970-01-01
      • 2021-03-20
      • 2015-12-09
      • 2014-11-03
      相关资源
      最近更新 更多