我使用Google api Client Library for JavaScript (Beta)来授权用户在web应用程序上的Google帐户(用于youtube操作)。一切都很好,但我不知道如何"注销"用户从我的应用程序,即重置访问令牌。
例如,下面的代码检查用户授权,如果没有,显示一个弹出窗口,让用户登录帐户,并允许web应用程序访问用户数据:
gapi.auth.authorize({client_id: CLIENT_ID, scope: SCOPES, immediate: false}, handleAuth);
但是客户端库没有重置授权的方法。
有一个解决方法可以将用户重定向到"accounts.google.com/logout",但是这个方法不是我需要的:因此,我们不仅从我的应用程序,而且在任何地方从Google帐户注销用户。
Google faq和客户端库描述都没有帮助
尝试撤销访问令牌,这将撤销实际授予,因此自动审批将停止工作。我想这会解决你的问题。
https://developers.google.com/accounts/docs/OAuth2WebServer tokenrevoke
很简单。撤销访问权限。
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
这取决于您重置授权的含义。我可以想到三种方法:
-
删除服务器上的授权
去myaccount.google.com/permissions,找到你的应用程序并删除它。下次您尝试登录时,您必须使用帐户选择器和同意屏幕完成完整的授权流程。 -
退出客户端
.signOut gapi.auth2.getAuthInstance () ();这样,Google授权服务器仍然会记住你的应用程序,并且授权令牌仍然保存在浏览器存储中。 -
退出并断开连接
.signOut gapi.auth2.getAuthInstance () ();
.disconnect gapi.auth2.getAuthInstance () ();这相当于(1),但在客户端。
直接使用:gapi.auth.setToken(null);
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);