Обзор OAuth: является ли пользователь тем, кем он / она считает себя ?:
Я не уверен, использовали ли вы OAuth для входа в Stack Overflow, например, вариант «Войти через Google», но когда вы используете эту функцию, Stack Overflow просто спрашивает Google, знает ли он, кто вы:
«Эй, Google, этот парень из Винеша утверждает, что vinesh.e@gmail.com - это он, это правда?»
Если вы уже вошли в систему, Google скажет ДА. Если нет, Google скажет:
«Подожди секунду, переполнение стека, я аутентифицирую этого парня, и если он сможет ввести правильный пароль для своей учетной записи Google, то это он».
Когда вы вводите свой пароль Google, Google сообщает Stack Overflow, что вы тот, кем вы себя называете, и Stack Overflow регистрирует вас.
Когда вы выйдите из вашего приложения, вы входите из вашего приложения:
Здесь разработчики, не знакомые с OAuth, иногда могут немного запутаться ... Google и Stack Overflow, Assembla, Vinesh's-very-cool-slick-webapp - это разные сущности, и Google ничего не знает о вашей учетной записи в крутом веб-приложении Vinesh, и наоборот. наоборот, помимо того, что предоставляется через API, который вы используете для доступа к информации профиля.
Когда ваш пользователь выходит из системы, он или она не выходит из Google, он выходит из вашего приложения, или Stack Overflow, или Assembla, или любого другого веб-приложения, использующего Google OAuth для аутентификации пользователя.
Фактически, я могу выйти из всех своих учетных записей Google и по-прежнему находиться в Stack Overflow. Как только ваше приложение узнает, кто является пользователем, этот человек может выйти из Google. Гугл больше не нужен.
С учетом сказанного, вы просите вывести пользователя из службы, которая вам не принадлежит. Подумайте об этом так: как пользователь, как вы думаете, насколько я был бы раздражен, если бы я вошел в 5 разных сервисов с моей учетной записью Google, то при первом выходе из одной из них мне нужно войти в свою учетную запись Gmail опять же, потому что этот разработчик приложения решил, что, когда я выхожу из его приложения, я также должен выйти из Google? Это очень быстро устареет. Короче, вы действительно не хотите этого делать ...
Да, да ладно, я все еще хочу вывести пользователя из Google, просто скажите мне, как мне это сделать?
С учетом сказанного, если вы все еще хотите выйти из системы Google и понимаете, что вполне можете нарушить его рабочий процесс, вы можете динамически создать URL-адрес выхода из одной из их кнопок выхода из службы Google, а затем вызвать его, используя элемент img или тег скрипта:
<script type="text/javascript"
src="https://mail.google.com/mail/u/0/?logout&hl=en" />
ИЛИ ЖЕ
<img src="https://mail.google.com/mail/u/0/?logout&hl=en" />
ИЛИ ЖЕ
window.location = "https://mail.google.com/mail/u/0/?logout&hl=en";
Если вы перенаправляете своего пользователя на страницу выхода или вызываете его из элемента, не имеющего междоменного ограничения, пользователь выйдет из системы Google.
Обратите внимание, что это не обязательно означает, что пользователь выйдет из вашего приложения, только Google. :)
Резюме:
Вам важно помнить, что при выходе из приложения вам не нужно заставлять пользователя повторно вводить пароль. В этом весь смысл! Он выполняет аутентификацию в Google, поэтому пользователю не нужно снова и снова вводить свой пароль в каждом веб-приложении, которое он использует. К этому нужно привыкнуть, но знайте, что, пока пользователь вошел в систему Google, вашему приложению не нужно беспокоиться о том, является ли пользователь тем, кем он / она себя называет.
У меня такая же реализация в проекте, как и у вас, с использованием информации профиля Google с OAuth. Я попробовал то же самое, что и вы, и это действительно начало рассердить людей, когда им приходилось заходить в Google снова и снова, поэтому мы перестали выводить их из Google. :)
Вы можете выйти из системы и перейти на свой сайт:
var logout = function() { document.location.href = "https://www.google.com/accounts/Logout?continue=https://appengine.google.com/_ah/logout?continue=http://www.example.com"; }
источник
У меня работает (java - android)
void RevokeAcess() { try{ HttpClient client = new DefaultHttpClient(); HttpPost post = new HttpPost("https://accounts.google.com/o/oauth2/revoke?token="+ACCESS_TOKEN); org.apache.http.HttpResponse response = client.execute(post); } catch(IOException e) { } CookieManager.getInstance().removeAllCookie(); // this is clear the cookies which tends to same user in android web view }
Вы должны вызвать эту функцию в AsyncTask в android
источник
Вы можете просто создать кнопку выхода и добавить к ней эту ссылку, и она в конечном итоге выйдет из приложения и перенаправит вас на желаемый сайт:
https://appengine.google.com/_ah/logout?continue=http://www.YOURSITE.com
просто переключите ВАШ САЙТ на свой сайт
источник
Это работает для выхода пользователя из приложения, но не для Google.
var auth2 = gapi.auth2.getAuthInstance(); auth2.signOut().then(function () { console.log('User signed out.'); });
Источник: https://developers.google.com/identity/sign-in/web/sign-in
источник
AuthInstance
что вы использовали. Сам ваш источник говорит ... « Вы можете разрешить пользователям выходить из вашего приложения, не выходя из Google ... »Ouath просто обнуляет экземпляр Google, следовательно, он не работает в Google. Вот как устроена архитектура. Выход из Google, если вы выходите из своего приложения, - грязная работа, но не может помочь, если требование предусматривает то же самое. Следовательно, добавьте в свою функцию signOut () следующее. Моим проектом было приложение Angular 6:
document.location.href = " https://www.google.com/accounts/Logout?continue=https://appengine.google.com/_ah/logout?continue=http://localhost:4200 ";
Здесь localhost: 4200 - это URL-адрес моего приложения. Если ваша страница входа - xyz.com, введите это.
источник
этот код будет работать для выхода
<script> function signOut() { var auth2 = gapi.auth2.getAuthInstance(); auth2.signOut().then(function () { console.log('User signed out.'); auth2.disconnect(); }); auth2.disconnect(); } </script>
источник
Чтобы выйти только из приложения, но не из Gmail:
window.gapi.load('auth2', () => { window.gapi.auth2 .init({ client_id: '<Your client id configired on google console>' }) .then(() => { window.gapi.auth2 .getAuthInstance() .signOut() .then(function() { console.log('User signed out.'); }); }); });
Я использую выше в своем коде ReactJs.
источник
Я надеюсь, что мы сможем достичь этого, сохраняя токен в сеансе при входе в систему и получая доступ к токену, когда он нажимал кнопку выхода.
String _accessToken=(String)session.getAttribute("ACCESS_TOKEN"); if(_accessToken!=null) { StringBuffer path=httpRequest.getRequestURL(); reDirectPage="https://www.google.com/accounts/Logout? continue=https://appengine.google.com/_ah/logout? continue="+path; } response.sendRedirect(reDirectPage);
источник
Похоже, Google недавно что-то сломал со своими отзывами (он начал возвращать нам 400 ошибок). Теперь тебе нужно позвонить
auth2.disconnect ();
В нашем случае мы должны подождать пару секунд для завершения вызова отключения, иначе код входа будет повторно авторизован до того, как это будет сделано. Было бы хорошо, если бы Google вернул обещание из метода отключения.
источник
Если кому-то это нужно на Java, вот мой ответ , для этого вам нужно вызвать Другой поток.
источник