Spring Security 5 - Как использовать SSO из id_token (Google в одно касание)

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

Я думаю, что правильный путь — создать 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;
}

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


person Nicolás Rossi    schedule 19.06.2020    source источник


Ответы (1)


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

person Nicolás Rossi    schedule 21.06.2020