Browserul ajunge la furnizorul de identitate, apoi autentificarea eșuează când aplicația schimbă codul de autorizare returnat. Acel schimb este o cerere ieșită din serverul aplicației, cu propriul client HTTP.

Pentru API-ul bazat pe RestClient disponibil în Spring Security 6.5, furnizați clientului de răspuns al tokenului pentru codul de autorizare o fabrică de cereri conștientă de proxy:

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

Clasele de convertizor și de gestionare a erorilor păstrează comportamentul documentat al cererii de token din Spring Security. Un RestClient generic configurat doar pentru un API JSON necorelat nu este o înlocuire echivalentă.

Conectați același tokenClient la configurația de securitate existentă:

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

Acestea sunt fragmente de configurație pentru o aplicație care are deja înregistrarea clientului și SecurityFilterChain. Ele aleg un proxy HTTP fără autentificare; un proxy care necesită credențiale are nevoie de configurația de autentificare corespunzătoare transportului ales. Pentru un punct final de token HTTPS accesibil public pe o rută publică permisă, o intrare HTTP din lista de proxy-uri HTTP poate completa acea adresă de proxy fără cont.

Păstrați gazda proxy separată de portul și schema URL. Lăsați URI-ul tokenului furnizorului de identitate ca destinație. Exemplul nu înlocuiește validarea certificatelor.

Cererile ulterioare au nevoie de propria verificare a proprietății. Preluarea UserInfo, schimburile de token de reîmprospătare, acordurile client-credentials și apelurile API protejate pot folosi alte obiecte client. Configurați clientul acceptat corespunzător când acea operațiune are nevoie și de rută. Pentru fluxul reactiv client_credentials din Spring Security 6.5, configurați clientul de token reactiv și furnizorul său de acorduri separat.

Exemplele vechi care folosesc OAuth2RestTemplate și AccessTokenProvider aparțin proiectului Spring Security OAuth mai vechi. Alegeți API-ul folosit de aplicația instalată înainte de a adapta codul; nu amestecați acele obiecte în această configurație.

Articole similare