oauth-2.0 Sping Boot OAuth2无法从HTTPS端点提取元数据

t5zmwmid  于 2022-10-31  发布在  其他
关注(0)|答案(1)|浏览(194)

我正在使用spring-security-oauth2-client5.2.2设置一个OAuth2客户端。客户端元数据是通过HTTPS端点提供的。为了能够获取元数据,我必须通过设置-Djavax.net.ssl.trustStore=src/main/resources/truststore.jks在JVM级别配置一个信任库。我想知道是否有一种方法可以通过编程方式为它设置一个用户定义的信任库。我找到了一些关于如何在请求令牌时为WebClient设置自定义SSLContext的指导原则,但是我找不到任何关于使用自定义SSLContext获取OAuth2的提供程序元数据的提示。
我研究了spring源代码,发现用于元数据提取的RestTemplate是在ClientRegistrations类中创建的,该类没有提供定制其行为的选项:https://github.com/spring-projects/spring-security/blob/main/oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/registration/ClientRegistrations.java#L59。
虽然我认为这是设置OAuth2身份验证流的一个非常基本的要求,但我是否遗漏了什么?为ClientRegistrationRepository类创建bean并自己获取元数据是正确的方法吗?
下面是我的OAuth2配置:

spring:
  security:
    oauth2:
      client:
        registration:
          test:
            client-id: test
            client-secret: secret
            redirect-uri: http://localhost:8000/auth/callback
            scope: openid,profile
        provider:
          keycloak:
            issuer-uri: https://mykeycloak.com:8443/auth/realms/test
wwtsj6pe

wwtsj6pe1#

我遇到了同样的问题:我需要为RestTemplate配置一个HTTP代理,但似乎我做不到。我想我只需复制类并示例化我自己的bean,但ClientRegistrations中的所有内容都是静态的,包括RestTemplate示例。
作为一种解决方法,可以通过直接提供所有值来配置整个提供程序(而不是ClientRegistrations使用.well-known URL从提供程序中发现参数),但这并不理想。

相关问题