ЗАПУСК Hydra и проверка входа в OpenID Connect

#oauth-2.0 #openid-connect #hydra

#oauth-2.0 #openid-connect #hydra

Вопрос:

Есть ли в ORY Hydra в настоящее время функция, которая проверяет, вошел ли клиент в систему через OpenID Connect? Я заметил, что есть API для выхода из системы через front-channel

Однако, когда пользователь повторно обращается к поставщику удостоверений, я не могу узнать, вошли ли они в систему в данный момент или нет. Они могут удалить свои HTTP-файлы cookie на стороне клиента, и тогда я не синхронизирован с Hydra. Значение: в Hydra они вошли в систему, но теперь они у меня как вышедшие из системы. Кроме того, в случае выхода из системы по обратному каналу я хочу иметь возможность запрашивать это состояние.

Есть ли API, который я пропускаю, который позволяет мне узнать, есть ли у клиента в настоящее время активный логин OpenID Connect через Hydra?

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

Следующие две таблицы, поставляемые с Hydra, по-видимому, являются источником истины для данных, которые мне нужны: hydra_oauth2_access и hydra_oauth2_authentication_session . Имеет ли смысл когда-либо запрашивать их напрямую, если нет поддерживаемого HTTP API из коробки, чтобы узнать, есть ли у пользователя активный сеанс аутентификации?

Комментарии:

1. По поставщику удостоверений вы имеете в виду конечную точку входа в систему, известную как приложение Login amp; Consent , где Hydra делегирует запрос авторизации?

Ответ №1:

Отправка запроса на аутентификацию через перенаправление Поставщику prompt=none , включая этот вариант использования: он автоматически войдет в систему и вернет новые токены, если у поставщика есть текущий сеанс единого входа, в противном случае он вернет код ошибки login_required .

Обратите внимание, что в обоих случаях никогда не будет явного взаимодействия с пользователем, поэтому это удобно (и предназначено) для запуска в скрытом iframe.

Комментарии:

1. Мне любопытно, почему скрытый iframe здесь предпочтительнее, чем просто использование XHR? это prompt=none было то, что мне было нужно в любом случае

Ответ №2:

СОСТОЯНИЕ ВХОДА В СИСТЕМУ

Клиент OAuth чаще всего представляет собой приложение пользовательского интерфейса с несколькими пользователями. Состояние каждого пользователя, вошедшего в систему, представлено файлом cookie сеанса сервера авторизации, к которому ни приложение, ни пользователь не имеют доступа:

  • Сервер авторизации (AS) выдает файл cookie единого входа, который будет сохранен в системном браузере для домена AS
  • Как веб-интерфейсы, так и собственные пользовательские интерфейсы отправляют его неявно при последующих запросах, когда они вызывают системный браузер

ПЕРЕНАПРАВЛЕНИЕ АВТОРИЗАЦИИ

Когда пользовательский интерфейс OAuth перенаправляет пользователя, обычно неизвестно, является ли:

  • Пользователю будет предложено войти в систему
  • Пользователь войдет в систему автоматически (например, пользователь мог войти в другое приложение)

Для веб-интерфейса можно отправить перенаправление авторизации в скрытом iframe с параметром prompt =none . Если пользователю необходимо выполнить вход, будет возвращен код ошибки login_required. Для получения дополнительной информации см. Мою страницу обновления токена с молчанием.

Однако это не совсем надежно, и в 2020 году возникнут некоторые проблемы с браузером. Также это может оказаться неподходящим, если вы используете другой тип клиента.

ФЕДЕРАТИВНЫЕ ЛОГИНЫ

В некоторых настройках AS перенаправляет дальше поставщику удостоверений (IDP), а состояние входа пользователя в систему дополнительно зависит от cookie сеанса IDP.

Приложение не может получить доступ к состоянию входа пользователя IDP, поскольку приложение взаимодействует только с AS.

ЕСТЬ ЛИ ПРОБЛЕМА С УДОБСТВОМ ИСПОЛЬЗОВАНИЯ?

Если да, отправьте ответ, и мы сможем обсудить дальше…