Il browser raggiunge il provider di identità, poi l'accesso non riesce quando l'applicazione scambia il codice di autorizzazione restituito. Quello scambio è una richiesta in uscita dal server dell'applicazione, con il proprio client HTTP.

Per l'API basata su RestClient disponibile in Spring Security 6.5, fornite una factory di richieste consapevole del proxy al client di risposta del token del codice di autorizzazione:

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

Le classi di convertitore e di gestore degli errori preservano il comportamento documentato delle richieste di token di Spring Security. Un RestClient generico configurato solo per un'API JSON non correlata non è una sostituzione equivalente.

Collegate lo stesso tokenClient alla configurazione di sicurezza esistente:

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

Questi sono frammenti di configurazione per un'applicazione che ha già la registrazione del client e la SecurityFilterChain. Selezionano un proxy HTTP senza autenticazione; un proxy che richiede credenziali necessita della configurazione di autenticazione corrispondente del trasporto scelto. Per un endpoint del token HTTPS raggiungibile pubblicamente su un percorso pubblico consentito, una voce HTTP dall'elenco dei proxy HTTP può compilare quell'indirizzo proxy senza account.

Tenete l'host del proxy separato dalla sua porta e dallo schema URL. Lasciate l'URI del token del provider di identità come destinazione. L'esempio non sostituisce la convalida dei certificati.

Le richieste successive necessitano del proprio controllo di proprietà. Il recupero di UserInfo, gli scambi di token di aggiornamento, le concessioni client-credentials e le chiamate API protette possono usare altri oggetti client. Configurate il client supportato corrispondente quando anche quell'operazione necessita del percorso. Per il flusso reattivo client_credentials di Spring Security 6.5, configurate il client del token reattivo e il suo provider di concessioni separatamente.

Gli esempi legacy che usano OAuth2RestTemplate e AccessTokenProvider appartengono al progetto Spring Security OAuth più vecchio. Scegliete l'API usata dall'applicazione installata prima di adattare il codice; non mescolate quegli oggetti in questa configurazione.

Articoli correlati