Spring Google OAuth2 с токеном обновления - PullRequest
0 голосов
/ 25 октября 2019

Моя текущая конфигурация OAuth2 не возвращает токен обновления. Моя конфигурация настолько проста, насколько это возможно. Как я могу настроить его так, чтобы он также возвращал refresh_token. Я аутентифицирую пользователя на стороне сервера. Так что решения JS не работают.

Мне нужен токен обновления для функции RememberMe. В частности, я использую метод oAuth2AuthorizedClientService.loadAuthorizedClient(clientId, principalName);, чтобы получить доступ к информации, полученной с сервера аутентификации Google.

 WebSecurityConfigurerAdapter {
 ...
 httpSecurity
        ...
          .and()
        .oauth2Login()
          .and()
        .rememberMe()
        ...

Application.yml:

security:
    oauth2:
      client:
        registration:
          google:
            clientId: ZZZ
            clientSecret: zzzz
            redirectUri: https://example.com/login/oauth2/code/google

1 Ответ

0 голосов
/ 25 октября 2019

Мое решение было добавить OAuth2AuthorizationRequestResolver

В OAuth2AuthorizationRequestResolver Я изменил customAuthorizationRequest (см. Ниже). Теперь он возвращает токен обновления каждый раз.

private OAuth2AuthorizationRequest customAuthorizationRequest( OAuth2AuthorizationRequest authorizationRequest) {

    Map<String, Object> additionalParameters =new LinkedHashMap<>(authorizationRequest.getAdditionalParameters());
    additionalParameters.put("access_type", "offline");

    return OAuth2AuthorizationRequest.from(authorizationRequest)
            .additionalParameters(additionalParameters)
            .build();
}

также обновил мой WebSecurityConfigurerAdapter

.oauth2Login()
    .authorizationEndpoint()
    .authorizationRequestResolver(
            new CustomAuthorizationRequestResolver(
                    this.clientRegistrationRepository))
    .and()
    .and()
.rememberMe()

, если кто-то найдет более простое решение, пишите! :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...