Spring OAuth2 Resource Server, создание нового пользователя на основе информации OAuth - PullRequest
0 голосов
/ 27 февраля 2020

Я настроил 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()));
}

1 Ответ

0 голосов
/ 28 февраля 2020

Это сложная область, которую не часто хорошо объясняют.

Я предполагаю, что после входа в систему вы сопоставляете электронную почту пользователя с токена Google с вашей собственной базой данных? Это довольно распространенная техника.

Не уверен, что знаю, что будет работать для вас лучше, но моя запись может дать вам некоторые идеи по поводу вариантов идентификации и управления пользователями.

...