如何通过支持 OAuth 2.0 的多个 IdP 设置身份验证?

问题描述 投票:0回答:1

如果我有一个基于 Spring Boot 3 的应用程序,该应用程序利用 Spring Security 和 Spring WebFlux,并且已设置为通过 IdP1 对用户进行身份验证和授权,那么如何增强此应用程序以通过 IdP2 对用户子集进行身份验证和授权?

配置。示例-

spring:
  security:
    oauth2:
      client:
        registration:
          idp1:
            client-id: idp1client
            client-secret: idp1secret
            scope: openid, profile, email
            authorization-grant-type: authorization_code
            redirect-uri: '{baseUrl}/login/oauth2/code/{registrationId}'
          idp2:
            client-id: idp2client
            client-secret: idp2secret
            scope: openid, profile, email
            authorization-grant-type: authorization_code
            redirect-uri: '{baseUrl}/login/oauth2/code/{registrationId}'
        provider:
          idp1:
            authorization-uri: http://idp1/auth
            token-uri: http://idp1/token
          idp2:
            authorization-uri: http://idp2/auth
            token-uri: http://idp2/token

通过 IdP1 的流量工作正常。 IdP2 需要自定义令牌请求(额外的 API 调用以获取某些字段等),以便在使用上述配置生成授权代码后生成访问令牌。这是我无法弄清楚的,并且在线文档感觉有点密集 - https://docs.spring.io/spring-security/reference/reactive/oauth2/index.html - 关于哪些 bean需要定制 IdP2 才能按预期工作。

提前致谢!

spring-security oauth-2.0 spring-webflux
1个回答
0
投票

如果这些授权服务器之一允许,您可以使用它来联合其他服务器的身份(Auth0、Amazon Cognito 和许多其他服务器包括 login with... 功能)。如果所有授权服务器都是外部服务并且没有一个支持所有其他服务的联合,您可以为此添加一个(Keycloak 和 Spring 授权服务器是经常使用的解决方案。在这种情况下,联合授权服务器将是唯一配置的服务器)在您的客户端和授权服务器中,带有“主”授权服务器的选项可以极大地简化用户角色管理。

否则,您可以在conf中为每个授权服务器保留一个provider(并为您希望用户能够登录的每个提供商保留一个authorization_coderegistration)。只需定义您的授权请求解析器即可为每个注册构建不同的请求,就像我在这里所做的那样。如果您不想自己编写(和维护)这样的授权请求解析器,请查看我编写的这个入门程序,它支持基于每个注册自定义授权请求参数。

© www.soinside.com 2019 - 2024. All rights reserved.