Spring Security 5 - Как использовать единый вход с id_token (Google в одно касание) - PullRequest
0 голосов
/ 19 июня 2020

Я работаю над приложением с Spring Boot 5 и OID C. Я настроил OID C с помощью Google, и он отлично работает. Меня перенаправляют на вход в Google, а затем он перенаправляет меня в приложение, создающее новый сеанс. Теперь пытаюсь использовать Google One-Tap . Он тоже отлично работает. Когда пользователь нажимает на модальное окно в одно касание, чтобы продолжить работу со своим идентификатором Google, я получаю POST с id_token. Что я хочу сделать, так это создать сеанс Spring из этого POST, поскольку он создается, когда пользователь входит в систему по OID C.

Я думаю, что правильный способ - это создать Filter расширение AbstractAuthenticationProcessingFilter. Я нашел несколько ссылок здесь и здесь , но у меня нет access_token при получении POST одним нажатием:

public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException {
        ...
        OAuth2AuthenticationToken oauth2Authentication = new OAuth2AuthenticationToken(
            authenticationResult.getPrincipal(),
            authenticationResult.getAuthorities(),
            authenticationResult.getClientRegistration().getRegistrationId());
        oauth2Authentication.setDetails(authenticationDetails);

        OAuth2AuthorizedClient authorizedClient = new OAuth2AuthorizedClient(
            authenticationResult.getClientRegistration(),
            oauth2Authentication.getName(),
            authenticationResult.getAccessToken(),
            authenticationResult.getRefreshToken());

        this.authorizedClientRepository.saveAuthorizedClient(authorizedClient, oauth2Authentication, request, response);

        return oauth2Authentication;
}

Кто-нибудь пробовали сделать это раньше?

1 Ответ

1 голос
/ 21 июня 2020

Наконец-то я нашел решение. Я поделился кодом здесь . Надеюсь, это поможет любому, кто имеет дело с той же проблемой.

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