Как мое клиентское приложение Spring Boot получает доступ к токену refre sh, предоставленному, например, Google в Spring Security 5?
Довольно простой вопрос. Удаленный сервер авторизации (например, Google) отправляет токен refre sh, и я хочу его использовать. Какой лучший способ сохранить и извлечь его в Spring Security 5?
Кажется, этот ответ , этот вопрос , эта внешняя ссылка Опишите подход, который больше не совместим, поскольку Oauth2 стал первоклассным гражданином в Spring Security 5.
Контекст:
Refre sh токены позволяют клиентскому приложению продолжать работу получить доступ к ресурсам после истечения сеанса пользователя. Согласно документам Google , токены refre sh должны быть постоянными:
Приложение должно хранить токен refre sh для будущего использования и использовать токен доступа для доступа к Google. API.
Spring Security делает токен доступа широко доступным в виде OAuth2AuthenticationToken , но токен refre sh там не включен.
Токен refre sh также недоступен в OidcUserService
(или классе, который его переопределяет), поскольку public OidcUser loadUser(OidcUserRequest userRequest)
не имеет доступа к токену refre sh. Это облом, поскольку было бы неплохо переопределить OidcUserService с помощью пользовательского класса, который создает / извлекает пользователя из его OID C данные пользователя и одновременно сохраняет связанный с ним токен refre sh .
OAuth2LoginAuthenticationFilter
сохраняет токен refre sh в репозитории ClientRegistrationRepository:
OAuth2AuthorizedClient authorizedClient = new OAuth2AuthorizedClient(
authenticationResult.getClientRegistration(),
oauth2Authentication.getName(),
authenticationResult.getAccessToken(),
authenticationResult.getRefreshToken());
this.authorizedClientRepository.saveAuthorizedClient(authorizedClient, oauth2Authentication, request, response);
Реализация по умолчанию сохраняет токен в переходной памяти, которая не подходит для распределенных приложений или сохраняется через перезапуски.
Кажется, есть JdbcOauth2AuthorizedClientService
, с недавно добавленными документами и схемой , которая предполагает , что это может быть полезно, но не было приведено ни одного примера его настройки или использования для получения токена refre sh.
Так как же клиентскому приложению сохранить и получить доступ к токену refre sh в Spring Security 5?