Nettleseren når identitetsleverandøren, deretter mislykkes påloggingen når applikasjonen utveksler den returnerte autorisasjonskoden. Denne utvekslingen er en utgående forespørsel fra applikasjonsserveren, med sin egen HTTP-klient.

For det RestClient-baserte API-et som er tilgjengelig i Spring Security 6.5, gi tokenresponsklienten for autorisasjonskoden en proxybevisst forespørselsfabrikk:

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

Konverter- og feilbehandlerklassene bevarer den dokumenterte tokenforespørselsatferden til Spring Security. En generisk RestClient som bare er konfigurert for et urelatert JSON-API, er ikke en likeverdig erstatning.

Koble den samme tokenClient til den eksisterende sikkerhetskonfigurasjonen:

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

Dette er konfigurasjonsbiter for en applikasjon som allerede har klientregistreringen og SecurityFilterChain. De velger en HTTP-proxy uten autentisering; en proxy som krever påloggingsinformasjon, trenger den valgte transportens tilsvarende autentiseringskonfigurasjon. For et offentlig tilgjengelig HTTPS-tokenendepunkt på en tillatt offentlig rute kan en HTTP-oppføring fra HTTP-proxylisten fylle ut den proxyadressen uten konto.

Hold proxyverten atskilt fra porten og URL-skjemaet. La token-URI-en til identitetsleverandøren være destinasjonen. Eksempelet erstatter ikke sertifikatvalidering.

Senere forespørsler trenger sin egen eierskapskontroll. Henting av UserInfo, utveksling av oppdateringstoken, client-credentials-tildelinger og beskyttede API-kall kan bruke andre klientobjekter. Konfigurer den tilsvarende støttede klienten når den operasjonen også trenger ruten. For den reaktive client_credentials-flyten i Spring Security 6.5 konfigurerer du den reaktive tokenklienten og tildelingsleverandøren separat.

Eldre eksempler med OAuth2RestTemplate og AccessTokenProvider tilhører det eldre Spring Security OAuth-prosjektet. Velg API-et som den installerte applikasjonen bruker før du tilpasser koden; ikke bland disse objektene inn i denne konfigurasjonen.

Relaterte artikler