我正在尝试编写一个访问公共 REST API 的程序。为了让我能够使用它,我需要提供 OAuth2 令牌。
我的应用程序使用 Spring Boot 2.4.2 和 Spring Cloud 版本 2020.0.1。应用程序本身每 24 小时调用一次 REST API,下载数据并将其存储在数据库中。不同的微服务在其他时间点使用这些数据,并且需要每天刷新数据。
我的方法是使用 OpenFeign 声明使用 REST API 的 REST 客户端并为其提供 OAuth2 令牌。这是一个非常常见的问题,因此我认为机器对机器的client_credentials工作流程已有详细记录。
事实上,我确实找到了一个使用 OpenFeign 执行此操作的简单示例 - 这里: https: //github.com/netshoes/sample-feign-oauth2-interceptor/blob/master/src/main/java/com/sample/feign /oauth2/interceptor/OrderFeignClientConfiguration.java
TL;DR:尝试编写需要 OAuth2 令牌(client_credentials 授予类型)的机器对机器微服务。
这是我的第一次尝试,但不幸的是,随着新的 Spring Security 版本的出现,我似乎无法实例化OAuth2FeignRequestInterceptor,我可能遇到了包问题。然后我继续研究 Spring Security 的文档和新的 OAuth2 重写,可以在这里找到:https ://docs.spring.io/spring-security/site/docs/5.1.2.RELEASE/reference/htmlsingle /#oauth2client .
我的方法是通过RequestInterceptor添加 Authorization Bearer 标头,将当前的 OAuth2 令牌注入 OpenFeign 客户端的请求中。我的假设是,我可以使用 Spring Security OAuth2 层或多或少自动地检索此信息。
使用文档,我尝试OAuth2RegisteredClient为我的拦截器提供一个 bean …