Как определить, нужно ли открывать запрос авторизации OID C в браузере - PullRequest
0 голосов
/ 17 апреля 2020

Я занимаюсь разработкой мобильного приложения, которое работает на стороне сервера с использованием OAuth2. Для авторизации мы используем OpenID Connect с потоком кода авторизации . Типичным шагом в процессе авторизации на мобильных устройствах в этом потоке является открытие URL-адреса авторизации в системном браузере, а затем перехват URL-адреса перенаправления с кодом авторизации.

В случае, когда пользователю необходимо ввести логин и пароль в браузере, это ХОРОШО. Но у нас есть клиенты, авторизованные по IP, и в этом случае системный браузер автоматически закрывается сразу после запуска и возвращает успешную авторизацию. Такой бесполезный запуск браузера раздражает, и я бы хотел его предотвратить.

Единственная идея, которая у меня есть сейчас, - это сделать запрос прямого HTTP-авторизации с параметром prompt=none, как описано в https://openid.net/specs/openid-connect-core-1_0.html#AuthRequest попробовать авторизоваться по IP. А в случае ошибок login_required или interaction_required повторите это в системном браузере без параметра prompt.

prompt = none

Сервер авторизации НЕ ДОЛЖНЫ отображаться страницы аутентификации или согласия пользователя. Ошибка возвращается, если Конечный пользователь еще не аутентифицирован, или у Клиента нет предварительно настроенного согласия на запрошенные Претензии или не выполнены другие условия для обработки запроса. Код ошибки, как правило, будет login_required, Interaction_required или другой код, определенный в разделе 3.1.2.6. Это можно использовать как метод проверки существующей аутентификации и / или согласия

Есть ли какой-либо другой способ определения момента в процессе авторизации, когда действительно необходимо взаимодействие пользователя с веб-страницей? Поэтому я могу открыть браузер, только если это необходимо. И без дополнительных запросов бесполезно для большинства клиентов.

1 Ответ

0 голосов
/ 21 апреля 2020

Поскольку вы используете OpenID Connect, вы можете подумать о том, чтобы включить какой-либо другой механизм для поддержания авторизованного состояния между приложением, серверным сервером и сервером идентификации.

Одним из таких сценариев может быть использование токенов Access и Refre sh,

  • Первый вход в систему, аутентификация конечного пользователя обязательна
  • Ваше приложение получает токены (ID токен, токен доступа и refre sh токен)
  • Клиент использует приложение, а приложение использует токен доступа для связи с бэкэндом
  • Клиент использует приложение второй раз
  • You знать, что срок действия предыдущего токена доступа истек, поэтому вы можете получить новый токен доступа, используя refre sh token

Конечно, срок действия refre sh токена может истечь, или служба идентификации может по какой-либо причине отозвать токен доступа (например, - пользователь меняет пароль). Но IMO - это лучшее решение, предоставляемое самой спецификацией.

...