Как можно кэшировать токены Oauth2 с помощью Spring Security и WebClient?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Гость
 Как можно кэшировать токены Oauth2 с помощью Spring Security и WebClient?

Сообщение Гость »


Как настроить запросы на обновление токенов и кэширование токенов Oauth2 с помощью Spring Security, WebClient и Spring Boot 3.1.3?

Я хотел бы настроить службу следующим образом:
[*]опрашивает сообщения из очереди (т. е. поток не является результатом входящего http-запроса) [*]выполняет некоторую обработку [*]запрашивает токен Oauth2 с сервера аутентификации [*]отправить обработанные данные вместе с токеном с помощью WebClient в сторонний API, который использует Oauth2 для аутентификации. [*]повторно использовать один и тот же токен для последующих запросов в течение срока действия токена.
Поток работает до шага 4. Приложение успешно выполняет запрос аутентификации Oauth, получает токен и отправляет обработанные данные в сторонний API, при этом токен добавляется в качестве токена Bearer в Заголовок Авторизация. Однако кажется, что шаг 5 отсутствует, поскольку на сервер аутентификации отправляются дополнительные запросы аутентификации для каждого запроса, несмотря на то, что токен предполагает, что он действителен в течение одного часа.

Как правильно настроить Spring Security и/или WebClient, чтобы действительные токены кэшировались и запросы на обновление токенов отправлялись на сервер аутентификации, когда срок действия существующего токена подходит к концу?

Вот что у меня сейчас есть:

Класс конфигурации

пакет com.company.example; импортировать org.springframework.context.annotation.Bean; импортировать org.springframework.context.annotation.Configuration; импортировать org.springframework.security.oauth2.client.AuthorizedClientServiceReactiveOAuth2AuthorizedClientManager; импортировать org.springframework.security.oauth2.client.ReactiveOAuth2AuthorizedClientManager; импортировать org.springframework.security.oauth2.client.ReactiveOAuth2AuthorizedClientProvider; импортировать org.springframework.security.oauth2.client.ReactiveOAuth2AuthorizedClientProviderBuilder; импортировать org.springframework.security.oauth2.client.ReactiveOAuth2AuthorizedClientService; импортировать org.springframework.security.oauth2.client.registration.ReactiveClientRegistrationRepository; импортировать org.springframework.security.oauth2.client.web.reactive.function.client.ServerOAuth2AuthorizedClientExchangeFilterFunction; импортировать org.springframework.web.reactive.function.client.WebClient; @Конфигурация общественный класс SomeConfig { частная статическая конечная строка REMOTE_SERVER_URL = "https://www.remote.com"; частная статическая окончательная строка OAUTH_CLIENT_REGISTRATION = «пример»; @Бин public ReactiveOAuth2AuthorizedClientManager AuthorizedClientManager( ReactiveClientRegistrationRepository clientRegistrationRepository, ReactiveOAuth2AuthorizedClientService AuthorizedClientService) { ReactiveOAuth2AuthorizedClientProvider AuthorizedClientProvider = ReactiveOAuth2AuthorizedClientProviderBuilder.builder() .Код авторизации() .refreshToken() .clientCredentials() .строить(); AuthorizedClientServiceReactiveOAuth2AuthorizedClientManager AuthorizedClientManager = новый AuthorizedClientServiceReactiveOAuth2AuthorizedClientManager( clientRegistrationRepository, авторизованныйClientService); авторизованныйClientManager.setAuthorizedClientProvider(authorizedClientProvider); вернуть авторизованныйClientManager; } @Бин Веб-клиент httpClient( ReactiveOAuth2AuthorizedClientManager AuthorizedClientManager) { ServerOAuth2AuthorizedClientExchangeFilterFunction oauth2Client = новый ServerOAuth2AuthorizedClientExchangeFilterFunction (authorizedClientManager); oauth2Client.setDefaultClientRegistrationId(OAUTH_CLIENT_REGISTRATION); вернуть WebClient.builder() .filter(oauth2Client) .baseUrl(REMOTE_SERVER_URL) .строить(); } } Запросить услугу

пакет com.company.example; импортировать org.springframework.stereotype.Service; импортировать org.springframework.web.reactive.function.client.WebClient; импортировать реактор.core.publisher.Mono; импортировать статический org.springframework.http.HttpHeaders.ACCEPT; импортировать статический org.springframework.http.HttpHeaders.CONTENT_TYPE; импортировать статический org.springframework.http.MediaType.APPLICATION_JSON_VALUE; @Услуга общественный класс RequestService { частная статическая окончательная строка SERVER_ENDPOINT = "/endpoint"; частный окончательный веб-клиент WebClient; общественный RequestService (WebClient webClient) { this.webClient = веб-клиент; } public Mono makeRequest(Mono requestObject) { вернуть requestObject.flatMap(req -> this.webClient .почта() .uri(SERVER_ENDPOINT) .header(ПРИНЯТЬ, APPLICATION_JSON_VALUE) .header(CONTENT_TYPE, APPLICATION_JSON_VALUE) .bodyValue(requestObject) .забрать() .bodyToMono(ResponseObject.class)); } } application.yaml

spring: безопасность: оаут2: клиент: Регистрация: пример: тип предоставления-авторизации: client_credentials идентификатор клиента: ${client-id} секрет клиента: ${client-secret} область действия: api://${app-id}/.default поставщик: пример: токен-uri: https://example.oauth.server.com/oauth2/v2.0/token Зависимости
4.0.0 org.springframework.boot spring-boot-starter-parent 3.1.3 com.example.oauth веб-клиент org.springframework.boot spring-boot-starter-webflux org.springframework.security spring-security-config org.springframework.boot spring-boot-starter-oauth2-client
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как можно кэшировать токены Oauth2 с помощью Spring Security и WebClient?
    Гость » » в форуме JAVA
    0 Ответы
    43 Просмотры
    Последнее сообщение Гость
  • Как можно кэшировать токены Oauth2 с помощью Spring Security и WebClient?
    Гость » » в форуме JAVA
    0 Ответы
    46 Просмотры
    Последнее сообщение Гость
  • Spring Security 6 – используйте токены JWT вместо JSESSIONID после входа в систему OAuth2
    Anonymous » » в форуме JAVA
    0 Ответы
    39 Просмотры
    Последнее сообщение Anonymous
  • Spring Boot 3.3.2 с проблемой Spring Security 6.3.1 (нет поддержки auth0-spring-security-api с Spring Framework 3.3.2)
    Anonymous » » в форуме JAVA
    0 Ответы
    93 Просмотры
    Последнее сообщение Anonymous
  • Невозможно найти bean-компонент <Spring Security> типа «org.springframework.security.oauth2.client.registration.ClientRe
    Anonymous » » в форуме JAVA
    0 Ответы
    43 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»