2013-03-26 205 views
15

我正在使用Google APIs Client Library for JavaScript (Beta)来授权用户在Google应用程序上的Google帐户(用于YouTube操作)。一切工作正常,但我不知道如何“注销”用户从我的应用程序,即重置访问令牌。如何重置谷歌oauth 2.0授权?

例如,下面的代码检查用户权限,如果没有,显示弹出窗口,用户登录进去,并允许Web应用程序访问用户数据:

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

但客户端库没有方法重置授权。

workaround将用户重定向到“accounts.google.com/logout”,但这种方式并不是我需要的:因此我们不仅从我的应用程序登录用户,还从任何地方登录用户。

谷歌常见问题和客户端库的描述既没有帮助。

+0

[重复的问题](http://stackoverflow.com/questions/14723383/google-logout-using-api-javascript-jquery) – 2013-03-26 20:45:25

回答

9

尝试撤销访问令牌,这应该取消实际的授权,以便自动批准将停止工作。我认为这会解决你的问题。

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

+0

感谢。它像一个魅力。 – ZavtraMen 2013-03-27 03:53:39

+1

对于JavaScript解决方案,请参阅以下其他问题:http://stackoverflow.com/questions/12809339/how-to-revoke-an-authentication-token-client-side-against-the-google-api/19205371#19205371 – 2014-08-06 10:18:04

7

它非常简单。只是撤销访问权限。

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

0

这取决于你通过重新授权的意思。我能想到的这样做的三种方式:服务器
转到myaccount.google.com/permissions上

  1. 取消授权,找到你的应用程序,并删除它。您下次尝试登录时,必须使用帐户选择器和许可屏幕完成完整的授权流程。

  2. 退出客户端
    gapi.auth2.getAuthInstance()。signOut();
    以这种方式,Google授权服务器仍会记住您的应用程序,授权令牌仍保留在浏览器存储中。

  3. 退出并断开连接
    gapi.auth2.getAuthInstance()。signOut();
    gapi.auth2.getAuthInstance()。disconnect();
    这相当于(1),但在客户端。