O navegador chega ao provedor de identidade e despois o inicio de sesión falla cando a aplicación intercambia o código de autorización devolto. Ese intercambio é unha solicitude saínte do servidor da aplicación, co seu propio cliente HTTP.

Para a API baseada en RestClient dispoñible en Spring Security 6.5, proporcione unha fábrica de solicitudes consciente do proxy ao cliente de resposta de token do código de autorización:

SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
factory.setProxy(new java.net.Proxy(
    java.net.Proxy.Type.HTTP,
    new java.net.InetSocketAddress("proxy.example", 8080)));
factory.setConnectTimeout(5000);
factory.setReadTimeout(15000);

RestClient tokenHttp = RestClient.builder()
    .requestFactory(factory)
    .messageConverters(converters -> {
        converters.clear();
        converters.add(new FormHttpMessageConverter());
        converters.add(new OAuth2AccessTokenResponseHttpMessageConverter());
    })
    .defaultStatusHandler(new OAuth2ErrorResponseErrorHandler())
    .build();

RestClientAuthorizationCodeTokenResponseClient tokenClient =
    new RestClientAuthorizationCodeTokenResponseClient();
tokenClient.setRestClient(tokenHttp);

As clases de convertidor e de xestor de erros conservan o comportamento documentado de solicitude de token de Spring Security. Un RestClient xenérico configurado só para unha API JSON non relacionada non é unha substitución equivalente.

Conecte ese mesmo tokenClient na configuración de seguridade existente:

http.oauth2Login(login -> login
    .tokenEndpoint(token -> token
        .accessTokenResponseClient(tokenClient)));

Estes son fragmentos de configuración para unha aplicación que xa ten o seu rexistro de cliente e o seu SecurityFilterChain. Seleccionan un proxy HTTP sen autenticación; un proxy que require credenciais necesita a configuración de autenticación correspondente do transporte elixido. Para un punto de conexión de token HTTPS accesible publicamente nunha ruta pública permitida, unha entrada HTTP da lista de proxies HTTP pode encher ese enderezo de proxy sen conta.

Manteña o host do proxy separado do seu porto e do seu esquema de URL. Deixe o URI do token do provedor de identidade como destino. O exemplo non substitúe a validación de certificados.

As solicitudes posteriores necesitan a súa propia comprobación de propiedade. A obtención de UserInfo, os intercambios de token de actualización, as concesións client-credentials e as chamadas a API protexidas poden usar outros obxectos de cliente. Configure o cliente compatible correspondente cando esa operación tamén necesite a ruta. Para o fluxo reactivo client_credentials de Spring Security 6.5, configure o cliente de token reactivo e o seu provedor de concesións por separado.

Os exemplos herdados que usan OAuth2RestTemplate e AccessTokenProvider pertencen ao proxecto Spring Security OAuth anterior. Escolla a API que usa a aplicación instalada antes de adaptar o código; non mesture eses obxectos nesta configuración.

Artigos relacionados