Spring Boot客户端调用由OAuth2保护的REST API

时间:2020-05-12 03:19:33

标签: java spring-boot spring-security

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

3 个答案:

答案 0 :(得分:1)

您可以使用声明式休息客户端-伪装spring-cloud-starter-openfeign

用于消费服务和缓存Spring cache来缓存访问令牌。

提示:调用访问令牌并对其进行缓存,然后在后续调用中将其恢复。 一旦端点引发未经授权的异常或令牌变得无效,则伪客户端中的重试机制可以进行另一个调用。要实现重试,您需要将“ spring-retry”作为依赖项之一。

答案 1 :(得分:1)

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

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

您提供令牌的位置由您自己决定。 它可以处于通信的任何阶段(请求参数,标头,按需)。

答案 2 :(得分:1)

我建议像下面这样使用CloseableHttpClient

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

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