Nettleseren når identitetsleverandøren, og deretter mislykkes innloggingen når applikasjonen utveksler den returnerte autorisasjonskoden. Den 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 feilhåndteringsklassene bevarer Spring Securitys dokumenterte tokenforespørselsatferd. 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 legitimasjon, 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 identitetsleverandørens token-URI være destinasjonen. Eksempelet erstatter ikke sertifikatvalidering.

Senere forespørsler trenger sin egen eierskapskontroll. Henting av UserInfo, utvekslinger 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 Spring Security 6.5s reaktive client_credentials-flyt konfigurerer du den reaktive tokenklienten og dens tildelingsleverandør 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 kode; ikke bland disse objektene inn i denne konfigurasjonen.

Relaterte artikler