Pelayar sampai ke penyedia identiti, kemudian log masuk gagal apabila aplikasi menukar kod kebenaran yang dikembalikan. Pertukaran itu ialah permintaan keluar daripada pelayan aplikasi, dengan klien HTTP sendiri.

Untuk API berasaskan RestClient yang tersedia dalam Spring Security 6.5, bekalkan kilang permintaan yang sedar proksi kepada klien respons token kod kebenaran:

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 penukar dan pengendali ralat mengekalkan tingkah laku permintaan token Spring Security yang didokumenkan. RestClient generik yang dikonfigurasikan hanya untuk API JSON tidak berkaitan bukan pengganti yang setara.

Sambungkan tokenClient yang sama ke dalam konfigurasi keselamatan sedia ada:

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

Ini ialah serpihan konfigurasi untuk aplikasi yang sudah mempunyai pendaftaran klien dan SecurityFilterChain. Ia memilih proksi HTTP tanpa pengesahan; proksi yang memerlukan kelayakan memerlukan konfigurasi pengesahan padanan bagi pengangkutan yang dipilih. Untuk titik akhir token HTTPS yang boleh dicapai secara awam pada laluan awam yang dibenarkan, entri HTTP daripada senarai proksi HTTP boleh mengisi alamat proksi tanpa akaun itu.

Asingkan hos proksi daripada port dan skema URLnya. Biarkan URI token penyedia identiti sebagai destinasi. Contoh ini tidak menggantikan pengesahan sijil.

Permintaan kemudian memerlukan pemeriksaan pemilikan sendiri. Pengambilan UserInfo, pertukaran token muat semula, pemberian client-credentials dan panggilan API terlindung boleh menggunakan objek klien lain. Konfigurasikan klien disokong yang sepadan apabila operasi itu juga memerlukan laluan. Untuk aliran client_credentials reaktif Spring Security 6.5, konfigurasikan klien token reaktif dan penyedia pemberiannya secara berasingan.

Contoh lama yang menggunakan OAuth2RestTemplate dan AccessTokenProvider tergolong dalam projek Spring Security OAuth yang lebih lama. Pilih API yang digunakan oleh aplikasi yang dipasang sebelum menyesuaikan kod; jangan campurkan objek itu ke dalam konfigurasi ini.

Artikel berkaitan