Как добавить функцию выхода на сайт с поддержкой OpenID?

Я недавно добавил логин OpenID на свой сайт. Но я не знаю, как добавить функцию выхода из системы.

Например, нажав кнопку "Войти", я могу показать форму входа выбранного поставщика OpenID, например, учетной записи Google. Однако я не знаю, как реализовать кнопку "Выход" для выхода из аккаунта Google.

Пожалуйста посоветуй.

9 ответов

Решение

Доверяющая сторона OpenID не может вывести пользователя из OP, вы можете реализовать только локальный выход. Так же, как RP не может войти в систему в OP.

Отдельные поставщики OpenID предлагают разные URL-адреса для выхода, на которые пользователь может быть перенаправлен.

Google: https://www.google.com/accounts/Logout

Yahoo: https://login.yahoo.com/config/login?logout=1

Было обсуждено, что OP могут предоставлять эти URL-адреса как часть стандарта; см. это обсуждение в списке рассылки OpenID.

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

Аналогичным образом, ссылка выхода на вашем сайте должна выводить пользователя только с вашего сайта, возвращая его в то же состояние, в котором он нажимал кнопку входа. Возможно, пользователь уже вышел из своего провайдера OpenID; ты не знаешь и не заботишься. Этот сайт является хорошим примером:).

Ниже приведен один трюк, с помощью которого я могу выйти из Google:

<iframe id="myIFrame" src="" style='display:none;' > 
 function logOutGoogle(){
     document.getElementById('myIFrame').src='https://www.google.com/accounts/Logout';
     timeOut();
 }

Вы можете реализовать локальный выход только для OpenID. Как сказал Чарльз Даффи, вы всегда можете использовать определенные URL-адреса, но это при условии, что пользователь использует поставщика, для которого вы знаете URL-адрес выхода из системы. Это может быть неприятно, если ваш пользователь обнаружит, что все его учетные записи Google вышли из системы при выходе из вашего веб-сайта.

Другой способ взглянуть на проблему заключается в том, хотите ли вы гарантировать, что человеку, вошедшему на ваш сайт, всегда нужно вводить свой пароль, а не просто входить, когда он уже вошел в систему с openid провайдером.

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

Чтобы сделать это на самом деле довольно просто, просто используйте расширение PAPE openid.ns.pape = "http://specs.openid.net/extensions/pape/1.0".
openid.pape.max_auth_age = 0

как часть URL, когда вы входите в OpenID провайдера.

Дополнительная информация здесь http://code.google.com/apis/accounts/docs/OpenID.html

Просто уничтожь сессию.

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

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

Вот надежное решение для выхода из Google и вашего RP.

Просто назовите этот URI

https://www.google.com/accounts/Logout?continue=https://appengine.google.com/_ah/logout?continue=https://www.yourapp.com

он выйдет из Google и перенаправит обратно в ваше приложение. Спасибо!

Вскоре я опубликую свое решение для выхода из Windows Live и Facebook.com STS.

Другие вопросы по тегам