相关疑难解决方法(0)

依赖于已弃用类的 OAuth2FeignRequestInterceptor 的替代方案

免责声明:老实说,我尝试在 google/github 上搜索,扫描了OAuth2 迁移指南,但找不到答案,所以我们开始吧。

来自 spring-cloud-security 项目的org.springframework.cloud.security.oauth2.client.feign.OAuth2FeignRequestInterceptor获取 OAuth2 令牌并将其设置为对客户端调用者透明的 Feign 的 RequestTemplate。
但是,它依赖于已弃用的OAuth2ClientContext类,该类引用了前面提到的迁移指南,该指南仍然说

对于其他流,需要构造和公开 OAuth2ClientContext 实例。

所以知道几件事会很好:
1.它真的被弃用了,或者只是它的用法应该改变(至少在某些情况下)?
2. 如果是前者 - 正确的选择是什么?
3. 是否有计划OAuth2FeignRequestInterceptor从使用已弃用的类迁移?

spring-security spring-security-oauth2 spring-cloud

13
推荐指数
1
解决办法
1030
查看次数

Feign 和 Spring Security 5 - 客户端凭据

我正在尝试从 Feign 客户端应用程序调用一些由 client_credentials 授权类型保护的后端系统。

可以使用以下 curl 结构检索来自后端系统的访问令牌(仅作为示例):

curl --location --request POST '[SERVER URL]/oauth/grant' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'Cookie: WebSessionID=172.22.72.1.1558614080219404; b8d49fdc74b7190aacd4ac9b22e85db8=2f0e4c4dbf6d4269fd3349f61c151223' \
--data-raw 'grant_type=client_credentials' \
--data-raw 'client_id=[CLIENT_ID]' \
--data-raw 'client_secret=[CLIENT_SECRET]'

{"accessToken":"V29C90D1917528E9C29795EF52EC2462D091F9DC106FAFD829D0FA537B78147E20","tokenType":"Bearer","expiresSeconds":7200}
Run Code Online (Sandbox Code Playgroud)

然后应将此 accessToken 设置在标头中,以用于对后端系统的后续业务调用。

所以现在我的问题是,如何使用 Feign 和 Spring Boot Security 5 来实现这一点。 经过一些研究,我找到了这个解决方案(不起作用):

  1. 在 application.yml 中定义我的客户端:
spring:
  security:
    oauth2:
      client:
        registration:
          backend:
            client-id:[CLIENT_ID]
            client-secret: [CLIENT_SECRET]
            authorization-grant-type: client_credentials
    
        provider:
          backend:
            token-uri: [SERVER URL]/oauth/grant
Run Code Online (Sandbox Code Playgroud)
  1. 创建 OAuth2AuthorizedClientManager Bean 以授权(或重新授权)OAuth 2.0 客户端:
curl --location --request POST '[SERVER URL]/oauth/grant' \
--header 'Content-Type: application/x-www-form-urlencoded' …
Run Code Online (Sandbox Code Playgroud)

oauth spring-security spring-cloud-feign

13
推荐指数
2
解决办法
6745
查看次数

将 OAuth2AuthorizedClient 解析为 Spring bean

我有一个自动连接许多服务的控制器。这些服务是 HTTP Restful 调用,从各种数据源检索数据,但这些服务受 OAuth2.0 保护。

我正在尝试使用 Spring Security 来实现客户端凭据流,该流将允许这些服务安全地从这些受保护的数据源检索数据,但在解析服务层的 OAuth2AuthorizedClient 数据对象时遇到一些困难。

我一直在尝试通过 @RegisteredOAuth2AuthorizedClient注释解析授权客户端:

public void setAuthorizedClient(
      @RegisteredOAuth2AuthorizedClient("azure") OAuth2AuthorizedClient authorizedClient) {

    ClientRegistration clientRegistration =
        this.clientRegistrationRepository.findByRegistrationId("azure");
    System.out.println(clientRegistration);

    OAuth2AccessToken accessToken = authorizedClient.getAccessToken();

    jwtToken = accessToken.getTokenValue();
  }
Run Code Online (Sandbox Code Playgroud)

是否可以将OAuth2AuthorizedClient解析为 Spring bean,然后将其注入到另一个 bean 中?
或者有更好的方法来构建这样的系统吗?

谢谢!

spring spring-security spring-security-oauth2

9
推荐指数
1
解决办法
4788
查看次数

OAuth2FeignRequestInterceptor 类在 Spring Boot 2.3 中已弃用

在我们最后的伪装客户端安全配置中,我们有这个 Bean:

    @Bean
    public RequestInterceptor oauth2FeignRequestInterceptor(
            ClientCredentialsResourceDetails oauth2RemoteResource) {
        return new OAuth2FeignRequestInterceptor(
                new DefaultOAuth2ClientContext(),
                oauth2RemoteResource
        );
    }
Run Code Online (Sandbox Code Playgroud)

在 2.3 spring 版本中OAuth2FeignRequestInterceptor已弃用!但是我们找不到新的。

有人知道吗?

single-sign-on spring-boot spring-security-oauth2 openfeign

5
推荐指数
1
解决办法
2846
查看次数