Прегледач стиже до даваоца идентитета, а затим пријава не успева када апликација размени враћени ауторизациони код. Та размена је одлазни захтев са сервера апликације, са сопственим 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 конфигурисан само за неповезани JSON API није еквивалентна замена.

Повежите исти 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 који користи инсталирана апликација пре прилагођавања кода; не мешајте те објекте у ову конфигурацију.

Повезани чланци