繁体   English   中英

Spring Boot OAuth2 无法从 HTTPS 端点获取元数据

[英]Spring Boot OAuth2 failed to fetch metadata from HTTPS endpoint

我正在使用spring-security-oauth2-client 5.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

我遇到了同样的问题:我需要为 RestTemplate 配置一个 HTTP 代理,但似乎我不能。 我以为我只需复制该类并实例化我自己的 bean,但 ClientRegistrations 中的所有内容都是静态的,包括 RestTemplate 实例。

作为一种解决方法,可以通过直接提供所有值来配置整个提供程序(而不是使用 .well-known URL 来从提供程序发现参数的 ClientRegistrations),但这并不理想。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM