Существующий бэкэнд 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 сгенерировать и вернуть их?
Спасибо