У меня есть сервер веб-приложений, мобильное приложение и веб-сервис (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 без сервера и получить информацию о пользователе.
Извините за мой английский. Спасибо