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

В моем приложении я внедрил 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, но, похоже, не работает.

Ответ 1

Обзор 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.:)

Ответ 2

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

var logout = function() {
    document.location.href = "https://www.google.com/accounts/Logout?continue=https://appengine.google.com/_ah/logout?continue=http://www.example.com";
}

Ответ 3

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