Preglednik stigne do davatelja identiteta, a zatim prijava ne uspije kada aplikacija razmijeni vraćeni autorizacijski kod. Ta razmjena je odlazni zahtjev s poslužitelja aplikacije, s vlastitim HTTP klijentom.

Za API zasnovan na RestClientu dostupan u Spring Securityju 6.5, dostavite tvornicu zahtjeva svjesnu proxyja klijentu odgovora na token autorizacijskog koda:

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

Klase pretvarača i rukovatelja pogreškama čuvaju dokumentirano ponašanje zahtjeva za token u Spring Securityju. Generički RestClient konfiguriran samo za nepovezani JSON API nije ekvivalentna zamjena.

Povežite isti tokenClient s postojećom sigurnosnom konfiguracijom:

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

Ovo su fragmenti konfiguracije za aplikaciju koja već ima registraciju klijenta i SecurityFilterChain. Oni biraju HTTP proxy bez autentifikacije; proxy koji zahtijeva vjerodajnice treba odgovarajuću konfiguraciju autentifikacije odabranog prijenosa. Za javno dostupnu HTTPS završnu točku tokena na dopuštenoj javnoj ruti, HTTP unos s popisa HTTP proxyja može popuniti tu adresu proxyja bez računa.

Držite host proxyja odvojeno od njegovih vrata i URL sheme. Ostavite URI tokena davatelja identiteta kao odredište. Primjer ne zamjenjuje provjeru certifikata.

Kasniji zahtjevi trebaju vlastitu provjeru vlasništva. Dohvaćanje UserInfo, razmjene tokena za osvježavanje, dodjele client-credentials i pozivi zaštićenog API-ja mogu koristiti druge klijentske objekte. Konfigurirajte odgovarajući podržani klijent kada ta operacija također treba rutu. Za reaktivni tok client_credentials u Spring Securityju 6.5 konfigurirajte reaktivni klijent tokena i njegovog davatelja dodjele odvojeno.

Stari primjeri s OAuth2RestTemplate i AccessTokenProvider pripadaju starijem projektu Spring Security OAuth. Odaberite API koji koristi instalirana aplikacija prije prilagodbe koda; ne miješajte te objekte u ovu konfiguraciju.

Povezani članci