Правильный способ применения OAuth2 для Интернета и мобильных устройств с API-интерфейсом для регистрации одного клиента - PullRequest
0 голосов
/ 11 июня 2019

У меня есть сервер веб-приложений, мобильное приложение и веб-сервис (SPA).

Мобильное приложение и веб-сервис используют OAuth2 для аутентификации и обработки логики для регистрации соответствующей информации.

Например, при использовании API Google OAuth2 и Интернет, и мобильный телефон могут проходить аутентификацию с помощью SDK. Как правило, мобильное приложение может получать токены доступа из Google SDK и извлекать информацию о пользователях, но для веб-служб требуется определенный адрес перенаправления.

В настоящее время мобильное приложение отправляет информацию о пользователе на сервер для получения результата объединения (json), но веб-сервису необходимо перенаправить на определенный URI после объединения. И я хочу отказаться от JWT в результате регистрации членства.

Вот пример кода)

(mobile)
@RequestMapping("/login")
public Response login(String email) {
    LoginResult loginResult = ...
    return loginResult.status(200) 
    // { jwt: "..." };
}

(web)
@RequestMapping("/login")
public Response login(String email) {
    LoginResult loginResult = ...
    response.redirect(loginResult, "example.com?token=...");
    // will be redirect uri with jwt at querystring
}

Как видите, один API не может обработать ответ двух приложений. Поэтому я попытался подумать, как решить эту проблему. Пожалуйста, судите, правильно ли это.

1) Как веб-приложение (SPA), так и мобильное приложение сами используют проверку подлинности OAuth2 с помощью SDK, получают информацию о пользователе и регистрируются, отправляя на сервер только значения электронной почты и пользовательского агента. На сервере зарегистрируйте пользователя и дайте другой ответ в зависимости от агента пользователя.
(Мобильный: jwt в формате json, web: редиректурирование со строкой запроса jwt)

В процессе аутентификации OAuth2 в Интернете в качестве собственного адреса SPA используется URI перенаправления.

ex) WAS: localhost: 8080, Web: localhost: 3000, OAuth2 RedirectUri: localhost: 3000 / oauth2 / callback / google

Так что на сервере есть только один такой API.

@RequestMapping("/login")
public Response login(String email, String userAgent) {
    LoginResult loginResult = ...
    if (userAgent == "mobile") {
        // return jwt(json format)
    } else {
        // redirect uri with jwt query string
    }
}

На самом деле, мобильное устройство, похоже, не является проблемой, поскольку оно имеет возможность извлекать информацию пользователя после аутентификации из SDK, но я не знаю, является ли сама сеть (SPA) правильным способом получения доступа токен через веб-SDK без сервера и получить информацию о пользователе.

Извините за мой английский. Спасибо

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