Как выйти из приложения, где я использовал OAuth2 для входа в Google?

63

В моем приложении я внедрил Google signout с помощью jsapi.

Я использовал URL https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=xxxxxx для подключения к Google, а затем https://www.googleapis.com/plus/v1/people/xxxxxx, чтобы получить данные пользователя из профиля google.

Теперь мне нужно вывести пользователя из Google, нажав кнопку из моего приложения. Как я могу реализовать это в JavaScript или, по крайней мере, он должен запрашивать страницу входа в Google при каждом входе пользователя.

Я пробовал approval_prompt=force, но, похоже, не работает.

Теги:
oauth-2.0

4 ответа

165
Лучший ответ

Обзор OAuth: есть ли пользователь, которого он/она говорит, что он/она есть?:

Я не уверен, что вы использовали OAuth для входа в Stack Overflow, например, "Login with Google", но когда вы используете эту функцию, Qaru просто спрашивает Google, знает ли он, кто вы:

"Эй, Google, этот Vinesh fella утверждает, что это [email protected], это правда?"

Если вы уже вошли в систему, Google скажет "ДА". Если нет, Google скажет:

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

Когда вы вводите свой пароль Google, Google сообщает, что Qaru вы являетесь тем, кем вы говорите, и вы можете использовать Stack Overflow.

При выходе из вашего приложения вы выходите из приложения:

Здесь, где разработчики, новые для OAuth, иногда немного запутываются... Google и Stack Overflow, Assembla, Vinesh's-very-cool-slick-webapp, все разные сущности, и Google ничего не знает о вашей учетной записи на Vinesh cool webapp, и наоборот, кроме того, что вы открыли через API, который вы используете для доступа к информации профиля.

Когда ваш пользователь выходит из системы, он или она не выходит из Google, он выходит из вашего приложения, или Qaru или Assembla, или какое-либо веб-приложение использовало Google OAuth для аутентификации пользователя.

Фактически, я могу выйти из всех учетных записей Google и все равно войти в Stack Overflow. Как только ваше приложение узнает, кто является пользователем, этот человек может выйти из Google. Google больше не нужен.

С учетом сказанного, то, что вы просите сделать, это вывести пользователя из службы, которая действительно не принадлежит вам. Подумайте об этом так: Как пользователь, насколько вы доволен, если бы я вошел в 5 разных сервисов с моей учетной записью Google, то в первый раз, когда я вышел из одного из них, мне нужно войти в мою учетную запись Gmail опять же, потому что разработчик приложения решил, что, когда я выхожу из его приложения, я должен также выйти из Google? Это будет очень быстро. Короче говоря, вы действительно не хотите этого делать...

Yeh yeh, что бы я ни хотел, я все равно хочу вывести пользователя из Google, просто скажите мне, как мне это сделать?

С учетом сказанного, если вы все еще хотите зарегистрировать пользователя из Google и понимаете, что вы вполне можете нарушить их рабочий процесс, вы можете динамически создавать URL выхода из одной из своих кнопок выхода из службы Google, а затем invoke, используя элемент img или тег script:

<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.:)

  • 6
    Спасибо за ваше драгоценное время и такое большое описание. Но у моего клиента другое мнение. Предположим, что пользователь вошел в приложение, используя свой логин Google из общедоступной системы, и вышел из приложения. Он может думать, что он также вышел из Google, но на самом деле нет! Любой другой пользователь, использующий систему позже, получит доступ к аккаунту Google.
  • 10
    Тогда ваши пользователи должны выйти из Google тоже. Дело в том, что они входят в 2 службы. Ваши пользователи должны научиться пользоваться OAuth. :) Я бы посоветовал обучить вашего клиента и пользователей. Если вам нужно, идите и покажите им. Это не займет много времени, чтобы реализовать, а затем отменить позже, когда вы поймете, сколько это отстой. :) Я сам не верил в это до тех пор, пока не сделал это и не увидел, сколько PITA пришлось снова входить в Google каждый раз, когда я выходил из LoopToDo. Подумайте, может быть, сообщение «Вы вышли из классного приложения Винеша, не забудьте> выйти из Google тоже <!»
Показать ещё 18 комментариев
15

Вы можете выйти и перенаправить на свой сайт:

var logout = function() {
    document.location.href = "https://www.google.com/accounts/Logout?continue=https://appengine.google.com/_ah/logout?continue=http://www.example.com";
}
  • 1
    В заключение! Спасибо! Я целый день пытался найти способ выхода из системы, чтобы следующий пользователь не мог войти в систему как предыдущий пользователь одним щелчком мыши, не зная адрес электронной почты или пароль ...
  • 1
    Это не работает, потому что достаточно открыть ту же страницу в другой вкладке, и вы снова вошли в систему ...
4

Для меня это работает (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

  • 2
    Хотя это правда, что это сработает, на самом деле вопрос касается JavaScript, а не Java.
  • 1
    Это звучит странно, что все, что вам нужно, это токен, вы можете грубо заставить Google насильно выйти из системы.
Показать ещё 3 комментария
0

Это работает для меня...

var auth2 = gapi.auth2.getAuthInstance();
auth2.signOut().then(function () {
  console.log('User signed out.');
});

Источник: https://developers.google.com/identity/sign-in/web/sign-in

  • 1
    это не приведет к полному выходу пользователя из его / ее учетной записи Google. Это только разрушает AuthInstance который вы использовали. Сам ваш источник говорит ... " Вы можете разрешить пользователям выходить из вашего приложения, не выходя из Google ... "
  • 0
    @RoshanaPitigala обновил ответ, чтобы уточнить. Этот ответ является ответом на заголовок вопроса, но как только вы прочитаете вопрос более подробно, вы поймете, что заголовок был написан неправильно. Этот ответ работает для всех, кто сделал это здесь в соответствии с заголовком вопроса.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню