Peramban mencapai penyedia identitas, lalu login gagal saat aplikasi menukar kode otorisasi yang dikembalikan. Pertukaran itu adalah permintaan keluar dari server aplikasi, dengan klien HTTP-nya sendiri.

Untuk API berbasis RestClient yang tersedia di Spring Security 6.5, sediakan pabrik permintaan yang sadar proksi kepada klien respons token kode otorisasi:

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

Kelas konverter dan penangan galat mempertahankan perilaku permintaan token Spring Security yang terdokumentasi. RestClient generik yang dikonfigurasi hanya untuk API JSON tak terkait bukan pengganti yang setara.

Sambungkan tokenClient yang sama ke konfigurasi keamanan yang ada:

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

Ini adalah fragmen konfigurasi untuk aplikasi yang sudah memiliki registrasi klien dan SecurityFilterChain. Mereka memilih proksi HTTP tanpa autentikasi; proksi yang memerlukan kredensial membutuhkan konfigurasi autentikasi transportasi terpilih yang sesuai. Untuk titik akhir token HTTPS yang dapat dijangkau publik pada rute publik yang diizinkan, entri HTTP dari daftar proksi HTTP dapat mengisi alamat proksi tanpa akun itu.

Pisahkan host proksi dari port dan skema URL-nya. Biarkan URI token penyedia identitas sebagai tujuan. Contoh ini tidak menggantikan validasi sertifikat.

Permintaan berikutnya memerlukan pemeriksaan kepemilikan sendiri. Pengambilan UserInfo, pertukaran token penyegaran, hibah client-credentials, dan panggilan API terlindungi dapat memakai objek klien lain. Konfigurasikan klien yang didukung sesuai saat operasi itu juga membutuhkan rute. Untuk alur client_credentials reaktif Spring Security 6.5, konfigurasikan klien token reaktif dan penyedia hibahnya secara terpisah.

Contoh lama yang memakai OAuth2RestTemplate dan AccessTokenProvider berasal dari proyek Spring Security OAuth yang lebih lama. Pilih API yang dipakai aplikasi terpasang sebelum menyesuaikan kode; jangan mencampur objek tersebut ke konfigurasi ini.

Artikel terkait