Как сбросить авторизацию google oauth 2.0?

Я использую клиентскую библиотеку API Google для JavaScript (бета) для авторизации пользователя аккаунт google в веб-приложении (для манипуляций с youtube). Все работает нормально, но я понятия не имею, как «выйти» пользователя из моего приложения, т.е. сбросить токены доступа.

Например, следующий код проверяет авторизацию пользователя и, если нет, показывает всплывающее окно, в котором пользователь может войти в учетную запись и разрешить веб-приложению доступ к данным пользователя:

gapi.auth.authorize({client_id: CLIENT_ID, scope: SCOPES, immediate: false}, handleAuth);

Но в клиентской библиотеке нет методов для сброса авторизации.

Существует обходной путь для перенаправления пользователя на "accounts.google.com/logout", но этот подход не то, что мне нужно: таким образом, мы выходим пользователя из учетной записи Google не только из моего приложения, но и где угодно.

Часто задаваемые вопросы Google и описание клиентской библиотеки бесполезны.


person ZavtraMen    schedule 26.03.2013    source источник
comment
Повторяющийся вопрос   -  person Mark S.    schedule 27.03.2013


Ответы (5)


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

https://developers.google.com/accounts/docs/OAuth2WebServer#tokenrevoke

person mariuss    schedule 27.03.2013
comment
Для решения JavaScript см. Другой вопрос: stackoverflow.com/questions/12809339/ - person Nacho Coloma; 06.08.2014
comment
Как отозвать учетные данные с помощью токена доступа? - person Jay Patel; 30.08.2018

Все очень просто. Просто отмените доступ.

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)
    {
    }
}

Но это должно быть в asyncTask

person Vinoj John Hosan    schedule 23.04.2014

Это зависит от того, что вы имеете в виду под сбросом авторизации. Я мог придумать три способа сделать это:

  1. Удаление авторизации на сервере
    Перейдите на страницу myaccount.google.com/permissions, найдите свое приложение и удалите его. В следующий раз, когда вы попытаетесь войти в систему, вам нужно будет выполнить полную авторизацию с помощью средства выбора учетной записи и экрана согласия.

  2. Выйдите из системы на клиенте
    gapi.auth2.getAuthInstance (). SignOut ();
    Таким образом, сервер авторизации Google по-прежнему запоминает ваше приложение, а токен авторизации остается в хранилище браузера.

  3. Выйти и отключить
    gapi.auth2.getAuthInstance (). SignOut ();
    gapi.auth2.getAuthInstance (). Disconnect ();
    Это эквивалент (1), но на клиенте.

person Stan Bashtavenko    schedule 24.01.2018

Просто используйте: gapi.auth.setToken(null);

person HasanAboShally    schedule 03.11.2013

Решение для dotnet, вызовите ниже API и передайте токен доступа, doc - https://developers.google.com/identity/protocols/oauth2/web-server#tokenrevoke

        string url = "https://accounts.google.com/o/oauth2/revoke?token=" + profileToken.ProfileAccessToken;
        RestClient client = new RestClient(url);

        var req = new RestRequest(Method.POST);
        IRestResponse resp = client.Execute(req);
person Ishika Jain    schedule 10.03.2021