我正在使用Google APIs Client Library for JavaScript (Beta)在网络应用程序上授权用户google帐户(用于youtube操作)。一切正常,但我不知道如何从我的应用程序“注销”用户,即重置访问令牌。
例如,以下代码检查用户授权,如果没有,则显示用户登录帐户的弹出窗口,并允许Web应用程序访问用户数据:
gapi.auth.authorize({client_id: CLIENT_ID, scope: SCOPES, immediate: false}, handleAuth);
但客户端库没有重置授权的方法。
有workaround将用户重定向到“accounts.google.com/logout”,但是这样 方法不是我需要的:因此我们不仅从我的应用程序,而且从任何地方,从谷歌帐户登录用户。
Google常见问题解答和客户端库说明都没有帮助。
答案 0 :(得分:12)
尝试撤消访问令牌,该令牌应撤消实际授权,以便自动批准将停止工作。我认为这将解决您的问题。
https://developers.google.com/accounts/docs/OAuth2WebServer#tokenrevoke
答案 1 :(得分: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中
答案 2 :(得分:2)
这取决于您重置授权的含义。我可以想到三种方法:
删除服务器上的授权
转到myaccount.google.com/permissions,找到您的应用并将其删除。下次您尝试登录时,您必须使用帐户选择器和同意屏幕完成完整的授权流程。
退出客户端
。gapi.auth2.getAuthInstance()signOut();
通过这种方式,Google授权服务器仍会记住您的应用,授权令牌仍保留在浏览器存储空间中。
退出并断开连接
。gapi.auth2.getAuthInstance()signOut();
。gapi.auth2.getAuthInstance()断开();
这相当于(1)但在客户端上。
答案 3 :(得分:0)
只需使用:gapi.auth.setToken(null);
答案 4 :(得分:0)
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);