El navegador arriba al proveïdor d'identitat i després l'inici de sessió falla quan l'aplicació intercanvia el codi d'autorització retornat. Aquest intercanvi és una petició sortint del servidor de l'aplicació, amb el seu propi client HTTP.

Per a l'API basada en RestClient disponible a Spring Security 6.5, proporcioneu una fàbrica de peticions conscient del proxy al client de resposta de testimoni del codi d'autorització:

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);

Les classes de convertidor i de gestor d'errors conserven el comportament documentat de la petició de testimoni de Spring Security. Un RestClient genèric configurat només per a una API JSON no relacionada no és una substitució equivalent.

Connecteu el mateix tokenClient a la configuració de seguretat existent:

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

Aquests són fragments de configuració per a una aplicació que ja té el registre de client i el SecurityFilterChain. Seleccionen un proxy HTTP sense autenticació; un proxy que requereix credencials necessita la configuració d'autenticació corresponent del transport triat. Per a un punt final de testimoni HTTPS accessible públicament en una ruta pública permesa, una entrada HTTP de la llista de proxys HTTP pot omplir aquesta adreça de proxy sense compte.

Manteniu l'amfitrió del proxy separat del seu port i de l'esquema d'URL. Deixeu l'URI del testimoni del proveïdor d'identitat com a destinació. L'exemple no substitueix la validació de certificats.

Les peticions posteriors necessiten la seva pròpia comprovació de propietat. L'obtenció d'UserInfo, els intercanvis de testimoni d'actualització, les concessions client-credentials i les crides a API protegides poden utilitzar altres objectes de client. Configureu el client compatible corresponent quan aquesta operació també necessiti la ruta. Per al flux reactiu client_credentials de Spring Security 6.5, configureu el client de testimoni reactiu i el seu proveïdor de concessions per separat.

Els exemples antics que utilitzen OAuth2RestTemplate i AccessTokenProvider pertanyen al projecte Spring Security OAuth més antic. Trieu l'API que utilitza l'aplicació instal·lada abans d'adaptar el codi; no barregeu aquests objectes en aquesta configuració.

Articles relacionats