Trình duyệt đến nhà cung cấp danh tính, sau đó đăng nhập thất bại khi ứng dụng trao đổi mã ủy quyền được trả về. Trao đổi đó là một yêu cầu gửi ra từ máy chủ ứng dụng, với ứng dụng khách HTTP riêng.

Đối với API dựa trên RestClient có sẵn trong Spring Security 6.5, cung cấp một nhà máy yêu cầu nhận biết proxy cho ứng dụng khách phản hồi token của mã ủy quyền:

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

Các lớp bộ chuyển đổi và trình xử lý lỗi giữ nguyên hành vi yêu cầu token đã được ghi tài liệu của Spring Security. Một RestClient chung chỉ được cấu hình cho một API JSON không liên quan không phải là sự thay thế tương đương.

Kết nối cùng tokenClient đó vào cấu hình bảo mật hiện có:

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

Đây là các đoạn cấu hình cho một ứng dụng đã có đăng ký ứng dụng khách và SecurityFilterChain. Chúng chọn một proxy HTTP không cần xác thực; proxy yêu cầu thông tin đăng nhập cần cấu hình xác thực tương ứng của phương thức vận chuyển đã chọn. Đối với điểm cuối token HTTPS có thể truy cập công khai trên một tuyến công khai được phép, một mục HTTP từ danh sách proxy HTTP có thể điền địa chỉ proxy không cần tài khoản đó.

Giữ máy chủ proxy tách biệt khỏi cổng và lược đồ URL của nó. Để URI token của nhà cung cấp danh tính làm đích. Ví dụ không thay thế việc xác thực chứng chỉ.

Các yêu cầu sau cần kiểm tra quyền sở hữu riêng. Truy xuất UserInfo, trao đổi token làm mới, cấp client-credentials và các lệnh gọi API được bảo vệ có thể dùng các đối tượng ứng dụng khách khác. Cấu hình ứng dụng khách được hỗ trợ tương ứng khi thao tác đó cũng cần tuyến. Đối với luồng client_credentials phản ứng của Spring Security 6.5, hãy cấu hình ứng dụng khách token phản ứng và nhà cung cấp cấp của nó riêng.

Các ví dụ cũ dùng OAuth2RestTemplate và AccessTokenProvider thuộc dự án Spring Security OAuth cũ hơn. Chọn API mà ứng dụng đã cài đặt sử dụng trước khi điều chỉnh mã; không trộn các đối tượng đó vào cấu hình này.

Bài viết liên quan