เบราว์เซอร์ไปถึงผู้ให้บริการระบุตัวตน จากนั้นการเข้าสู่ระบบล้มเหลวเมื่อแอปพลิเคชันแลกเปลี่ยนรหัสอนุญาตที่ส่งกลับมา การแลกเปลี่ยนนั้นเป็นคำขอออกจากเซิร์ฟเวอร์แอปพลิเคชัน ซึ่งมีไคลเอนต์ HTTP ของตัวเอง

สำหรับ API ที่อิง RestClient ซึ่งมีใน Spring Security 6.5 ให้โรงงานคำขอที่รู้จักพร็อกซีแก่ไคลเอนต์ตอบกลับโทเค็นของรหัสอนุญาต:

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

คลาสตัวแปลงและตัวจัดการข้อผิดพลาดรักษาพฤติกรรมคำขอโทเค็นที่บันทึกไว้ของ Spring Security ไว้ RestClient ทั่วไปที่กำหนดค่าไว้สำหรับ API JSON ที่ไม่เกี่ยวข้องเท่านั้นไม่ใช่สิ่งทดแทนที่เทียบเท่า

เชื่อม tokenClient เดียวกันเข้ากับการกำหนดค่าความปลอดภัยที่มีอยู่:

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

นี่คือส่วนย่อยของการกำหนดค่าสำหรับแอปพลิเคชันที่มีการลงทะเบียนไคลเอนต์และ SecurityFilterChain อยู่แล้ว พวกมันเลือกพร็อกซี HTTP โดยไม่มีการพิสูจน์ตัวตน พร็อกซีที่ต้องใช้ข้อมูลรับรองต้องการการกำหนดค่าการพิสูจน์ตัวตนที่ตรงกับการขนส่งที่เลือก สำหรับปลายทางโทเค็น HTTPS ที่เข้าถึงได้สาธารณะบนเส้นทางสาธารณะที่อนุญาต รายการ HTTP จากรายการพร็อกซี HTTPสามารถเติมที่อยู่พร็อกซีที่ไม่มีบัญชีนั้นได้

แยกโฮสต์ของพร็อกซีออกจากพอร์ตและสคีมา URL ปล่อย URI ของโทเค็นของผู้ให้บริการระบุตัวตนเป็นปลายทาง ตัวอย่างนี้ไม่ได้แทนที่การตรวจสอบใบรับรอง

คำขอภายหลังต้องมีการตรวจสอบความเป็นเจ้าของของตัวเอง การดึง UserInfo การแลกเปลี่ยนโทเค็นรีเฟรช การให้สิทธิ์ client-credentials และการเรียก API ที่ได้รับการป้องกันสามารถใช้วัตถุไคลเอนต์อื่นได้ กำหนดค่าไคลเอนต์ที่รองรับซึ่งสอดคล้องเมื่อการดำเนินการนั้นต้องการเส้นทางด้วย สำหรับโฟลว์ client_credentials แบบรีแอกทีฟของ Spring Security 6.5 ให้กำหนดค่าไคลเอนต์โทเค็นแบบรีแอกทีฟและผู้ให้สิทธิ์ของมันแยกต่างหาก

ตัวอย่างเดิมที่ใช้ OAuth2RestTemplate และ AccessTokenProvider เป็นของโปรเจกต์ Spring Security OAuth ที่เก่ากว่า เลือก API ที่แอปพลิเคชันที่ติดตั้งใช้ก่อนปรับโค้ด อย่าใส่วัตถุเหล่านั้นลงในการกำหนดค่านี้

บทความที่เกี่ยวข้อง