Я настроил OAuth2, используя google в качестве сервера авторизации с моим сервером ресурсов (Spring), и я могу получить доступ к API на моем сервере, используя OAuth2. Хотя я не уверен, что было бы лучшим способом регистрации пользователя.
Я могу проверить, существует ли пользователь на сервере или нет, и создать его, когда он делает запрос API. Но я не уверен, что так и должно было быть. Я очень плохо знаком с OAuth2, только что начал изучать, как их реализовать, 2 дня go, поэтому я был бы признателен за некоторые отзывы о том, как это сделать правильно.
Как показано ниже, я выбрасываю исключение, когда Пользователь не может быть найден после получения информации о пользователе для токена или его сохранения в базе данных как существующего пользователя.
private Authentication getAuthenticationToken(String accessToken) {
Map<String, ?> userInfo = getUserInfo(accessToken);
String id = (String) userInfo.get("sub");
String email = (String) userInfo.get("email");
Boolean email_verified = (Boolean) userInfo.get("email_verified");
String given_name = (String) userInfo.get("given_name");
String family_name = (String) userInfo.get("family_name");
String name = (String) userInfo.get("name");
String picture = (String) userInfo.get("picture");
User user = userService.getUserByEmail(email);
if (id == null)
{
throw new InternalAuthenticationServiceException("User not found");
//If possible replace this with API Response
}
else if(user == null)
{
throw new InternalAuthenticationServiceException("User not registered");
//If possible forward request to registration page to create user with userinfo?
//Or should i just create user everytime this happens?
}
return new UsernamePasswordAuthenticationToken(new GooglePrincipal(userService.getUserByEmail(email)), null, conversionUtils.getUserAuthority(user.getRoles()));
}