Το πρόγραμμα περιήγησης φτάνει στον πάροχο ταυτότητας και μετά η σύνδεση αποτυγχάνει όταν η εφαρμογή ανταλλάσσει τον κωδικό εξουσιοδότησης που επιστράφηκε. Αυτή η ανταλλαγή είναι ένα εξερχόμενο αίτημα από τον διακομιστή εφαρμογών, με δικό του πελάτη HTTP.

Για το API που βασίζεται σε RestClient και είναι διαθέσιμο στο Spring Security 6.5, εφοδιάστε τον πελάτη απόκρισης token του κωδικού εξουσιοδότησης με ένα εργοστάσιο αιτημάτων που γνωρίζει τον διαμεσολαβητή:

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

Οι κλάσεις μετατροπέα και χειριστή σφαλμάτων διατηρούν την τεκμηριωμένη συμπεριφορά αιτήματος token του Spring Security. Ένα γενικό RestClient ρυθμισμένο μόνο για ένα άσχετο JSON API δεν είναι ισοδύναμη αντικατάσταση.

Συνδέστε τον ίδιο tokenClient στην υπάρχουσα διαμόρφωση ασφαλείας:

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

Αυτά είναι τμήματα διαμόρφωσης για μια εφαρμογή που έχει ήδη την εγγραφή πελάτη και το SecurityFilterChain. Επιλέγουν διαμεσολαβητή HTTP χωρίς έλεγχο ταυτότητας· ένας διαμεσολαβητής που απαιτεί διαπιστευτήρια χρειάζεται την αντίστοιχη διαμόρφωση ελέγχου ταυτότητας του επιλεγμένου μεταφορέα. Για ένα δημόσια προσβάσιμο τελικό σημείο token HTTPS σε επιτρεπόμενη δημόσια διαδρομή, μια καταχώριση HTTP από τη λίστα διαμεσολαβητών HTTP μπορεί να συμπληρώσει αυτή τη διεύθυνση διαμεσολαβητή χωρίς λογαριασμό.

Κρατήστε τον κεντρικό υπολογιστή του διαμεσολαβητή ξεχωριστά από τη θύρα και το σχήμα URL του. Αφήστε το URI token του παρόχου ταυτότητας ως προορισμό. Το παράδειγμα δεν αντικαθιστά την επικύρωση πιστοποιητικών.

Τα μεταγενέστερα αιτήματα χρειάζονται δικό τους έλεγχο ιδιοκτησίας. Η ανάκτηση UserInfo, οι ανταλλαγές token ανανέωσης, οι παραχωρήσεις client-credentials και οι κλήσεις προστατευμένου API μπορούν να χρησιμοποιούν άλλα αντικείμενα πελάτη. Διαμορφώστε τον αντίστοιχο υποστηριζόμενο πελάτη όταν αυτή η λειτουργία χρειάζεται επίσης τη διαδρομή. Για τη ροή client_credentials αντιδραστικού τύπου του Spring Security 6.5, διαμορφώστε τον αντιδραστικό πελάτη token και τον πάροχο παραχωρήσεών του ξεχωριστά.

Τα παλαιότερα παραδείγματα που χρησιμοποιούν OAuth2RestTemplate και AccessTokenProvider ανήκουν στο παλαιότερο έργο Spring Security OAuth. Επιλέξτε το API που χρησιμοποιεί η εγκατεστημένη εφαρμογή πριν προσαρμόσετε κώδικα· μην αναμειγνύετε αυτά τα αντικείμενα σε αυτή τη διαμόρφωση.

Σχετικά άρθρα