принудительный выход из системы, используя identityserver4, например, Facebook, где вы вошли в систему - PullRequest
0 голосов
/ 09 января 2019

Вот мой случай: У меня два сервера. один MVC, другой Auth. Сервер аутентификации использует identityServer4 для интеграции единого входа. MVC - это клиент, который должен войти в систему. Я использую HybridAndClientCredentials GrantTypes для клиента MVC. На веб-сайте MVC есть страница, например, Facebook, где вы вошли в систему. На ней можно перечислить учетную запись, в которой он вошел, и использовать какое устройство. Все это хорошо.

Есть ли способ принудительно отключить другие устройства, такие как Facebook?

Я пытаюсь удалить refresh_token, с которого устройство, которое я хочу принудительно выйти из базы данных, и когда истек срок доступа access_token и id_token, я использую устройство для вызова защищенного API, веб-сайт перенаправляет на страницу веб-сайта Auth, потому что access_token истек Это было правильно. Но после этого сервер аутентификации всегда генерирует код авторизации и id_token, хотя refresh_token уже удален. Из-за того, что был создан id_token, веб-сайт перенаправляет на страницу веб-сайта MVC, а затем сервер MVC вызывает сервер аутентификации в фоновом режиме. А также!! Сервер аутентификации генерирует access_token и возвращается на сервер MVC. Это означает, что для обновления сайта MVC access_token не требуется refresh_token !! Я очень запутался, почему оконечная точка авторизации не проверяет, существует ли refresh_token? это правильно? Если это правильно, как я могу принудительно выйти из другого устройства? Я застрял здесь очень долго, пожалуйста, помогите !!

1 Ответ

0 голосов
/ 09 января 2019

Но после этого сервер аутентификации всегда генерирует код авторизации и id_token, хотя refresh_token уже удален.

Это потому, что ваш пользователь все еще вошел в систему на веб-странице IdentityServer4 и имеет действительный файл cookie. Токен обновления используется только вашим приложением MVC для получения новых токенов доступа.

Это означает, что веб-сайт MVC обновляет access_token, не требующий refresh_token !! Нет. Когда срок действия токена истекает, вы получаете несанкционированный доступ (когда MVC вызывает сервер идентификации для нового токена доступа).

Пользователь перенаправляется на IdSrv, где он уже вошел в систему, и, поскольку пользователь авторизовал приложение (он дал свое согласие при первом входе в систему, чтобы позволить этому приложению получить доступ к своим данным), его не спрашивают снова и просто получает токен и возвращается к вашему приложению.

Там новый токен обновления и код используются для получения токена доступа.

Если это правильно, как я могу принудительно выйти из другого устройства? Я застрял здесь очень долго, пожалуйста, помогите! Вам необходимо внедрить некоторый код в ваше приложение IdSrv4, которое отслеживает различные логины устройств и делает недействительным этот конкретный.

Кроме того, из вашего приложения MVC вы также можете выйти из IdSrv4, когда передаете токен сервера идентификации в качестве подсказки.

Из IdSrv4 Документы

id_token_hint

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

Это должно сделать недействительным куки пользователя в приложении IdSrv4.

Если это не сработает, вам придется добавить эту функцию в приложение IdSrv4, чтобы сделать недействительным определенный сеанс cookie (с устройства, с которого вы хотите выйти)

...