Spring Security 6.5: проксирање на размената на OAuth кодот за авторизација
Дајте му на клиентот за одговор со токен на кодот за авторизација во Spring Security RestClient што го познава проксито, задржувајќи ги OAuth конверторите и обработувачот на грешки.
Браузерот стигнува до давателот на идентитет, потоа најавувањето не успева кога апликацијата го разменува вратениот код за авторизација. Таа размена е излезно барање од серверот на апликацијата, со сопствен 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-то што го користи инсталираната апликација пред да го прилагодите кодот; не мешајте ги тие објекти во оваа конфигурација.