Добавить Google SIgn в существующий OAuth2 - PullRequest
0 голосов
/ 25 февраля 2019

Существующий бэкэнд Spring с OAuth2 реализован.Когда пользователь входит в систему с нашего внешнего интерфейса, мы выдаем ей токен доступа и токен обновления, которые они используют для выполнения каких-либо задач.Теперь мы добавили Google Войти .Я добавил следующие классы (я удалил ненужный код):

Класс токена

public class GoogleIdAuthToken extends AbstractAuthenticationToken {
    // Some members
    public GoogleIdAuthToken(String token, Object details) {
        super(new ArrayList<>());
        // Init members with token and details
    }
    // Another ctor here
...
}

Класс фильтра

public class GoogleIdAuthenticationFilter extends AbstractAuthenticationProcessingFilter {
    // Some members   
    public GoogleIdAuthenticationFilter(AuthenticationManager authenticationManager, String defaultFilterProcessesUrl) {
        super(defaultFilterProcessesUrl);
        setAuthenticationManager(authenticationManager);
    }

    @Override
    public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException, IOException, ServletException {
        // Get token and details from request and create an authRequest
        GoogleIdAuthToken authRequest = new GoogleIdAuthToken(token, details);
        Authentication authResult = getAuthenticationManager().authenticate(authRequest);
        return authResult;
    }
...
}

Класс провайдера

@Component
public class GoogleIdAuthenticationProvider implements AuthenticationProvider {
    private String clientId = "xxxxx";

    @Override
    public Authentication authenticate(Authentication authentication) throws AuthenticationException {        
        GoogleIdAuthToken GoogleIdAuthToken = (GoogleIdAuthToken) authentication;
        httpTransport = GoogleNetHttpTransport.newTrustedTransport();        
        GoogleIdTokenVerifier verifier = new GoogleIdTokenVerifier.Builder(httpTransport, jsonFactory)
                .setAudience(Collections.singletonList(getClientId()))
                .build();

        GoogleIdToken googleIdToken = 
        verifier.verify((String) GoogleIdAuthToken.getCredentials());

        Payload payload = googleIdToken.getPayload();
        // Get profile information from payload and use it to get user from DB        
        UserDetails ud = userDetailsService.loadUserByUsername(info_from_payload);

        return new GoogleIdAuthToken(
                    (String) GoogleIdAuthToken.getCredentials(),
                    ud,
                    ud.getAuthorities(),
                    authentication.getDetails());
        }
    }
...
}

Работает нормально, т.е. когда пользователь входит в систему с помощью Google , GoogleIdAuthenticationProvider.authenticate () вызывается, в нем я получаю пользователя из БД и возвращаю GoogleIdAuthToken.Но я также должен сгенерировать и вернуть только что зарегистрированному пользователю Google токены доступа / обновления, как если бы они вошли с нашего внешнего интерфейса.

Как мне это сделать?Как попросить существующий OAuth2 сгенерировать и вернуть их?

Спасибо

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