Есть ли способ завершить все сеансы для идентификатора субъекта?

#identityserver4

#identityserver4

Вопрос:

Что я хотел бы сделать, так это завершить все сеансы для пользователя, когда пользователь изменяет / сбрасывает свой пароль (используя ASP.NET Идентификатор ядра). Я использую библиотеку oidc-client-js внутри SPA. Я выяснил, как завершить текущий сеанс для пользователя и заставить все вкладки, находящиеся в этом же сеансе (скажем, другие вкладки в тех же окнах браузера), распознавать окончание сеанса через iFrame проверки сеанса, но любые другие сеансы (скажем, в окне инкогнито), похоже, все еще функционируют, даже если их токены обновления / все сохраненные разрешения для этого идентификатора субъекта были отозваны.

Есть ли какой-нибудь способ заставить этот iFrame возвращать клиенту сообщение о завершении сеанса для всех сеансов, например, возможно, чтобы страница iFrame проверяла сохраненные разрешения для этого сеанса или что-то в этом роде? Я в порядке, если текущий выпущенный access_token продолжает работать (они недолговечны), но просто хочу, чтобы токены обновления были признаны недействительными и сеанс завершился.

Ответ №1:

Вариант 1

Существует черновик спецификации OpenID Connect Session, который будет делать то, что вы хотите — он позволяет интерфейсным клиентам проверять текущее состояние сеанса через iframe. Это черновик и может не быть реализован ASP.NET Однако идентификатор ядра.

https://openid.net/specs/openid-connect-session-1_0.html

Вариант 2

Альтернативный механизм для решения вашей проблемы программно — путем установки проверки в вашем коде обмена токенами. Ваши токены доступа, по-видимому, будут относительно недолговечными, и поэтому интерфейс должен регулярно приобретать новые токены доступа (либо через токен обновления, либо с помощью токена id в неявном потоке, например.

В вашем обмене токенами вы можете проверить наличие метки времени, когда пароль был обновлен в последний раз.

Если он более поздний, чем временная метка, когда был выпущен токен, то вместо выдачи нового токена доступа вы могли бы вернуть 401 и управлять перенаправлением на вашу конечную точку аутентификации с помощью механизма по вашему выбору.

Это не приводит к мгновенному выходу пользователя из альтернативных окон браузера, поскольку это зависит от окна истечения срока действия ваших токенов доступа. Однако If имеет преимущество в том, что работает в разных браузерах, потому что это не зависит от информации о сеансе конкретного браузера. Он также может проверять наличие клиентов, занесенных в черный список или изменивших свой адрес электронной почты, и другие проверки, которые могут иметь отношение к желанию принудительной повторной аутентификации.

Для ремня и фигурных скобок вы можете использовать оба этих метода.