如何撤销我的应用从用户的google gmail AccountManager.getAuthToken获得的权限(

时间:2012-11-04 21:11:07

标签: android oauth accountmanager

使用Eclipse创建一个测试应用,从我的设备上的某个谷歌电子邮件帐户中获取authToken

执行此操作提示我使用允许访问对话框,其中我按下允许访问:

accountManager.getAuthToken(account,"oauth2:https://www.googleapis.com/auth/userinfo.profile", false, new GetAuthTokenCallback(), null);

我想创建一个可以从API8开始运行的选择器对话框,用户可以选择 他允许我访问哪些谷歌帐户。为此,我必须撤消再次查看屏幕的权限。

我应该在这个页面上看到我的测试应用程序吗? Authorized Access to your Google Account

我已经找到了撤销权限的方法,而非正在运作..
唯一有用的是创建一个新的应用项目。

更新2013
使用Google Play服务GCM,这项工作正常

3 个答案:

答案 0 :(得分:8)

关于“Authorized Access to your Google Account”页面,您将看不到您的应用,因为此权限是存储在手机数据库中的设备本地权限。

似乎不可能以简单的方式撤销此权限。我已经找到了几种方法可以再次触发对话,但没有一种方法是理想的。在某些解决方案中,它不是完全相同的对话框,但它可能足够接近测试目的,具体取决于您想要做什么:

getAuthToken方法在内部使用应用程序的UID跟踪是否已授予访问权限。因此,如果您能够以某种方式强制Android为您的应用程序提供新的UID或强制它清除给定授权的数据库,则应再次显示该对话框。以下是其他人说为他们工作的一些解决方案,但这对我不起作用(可能取决于你使用的是哪款手机?):

作为旁注,revoke permissions to access google auth tokens提及有internal Android methods用于撤消访问权限,但这些无法通过公共API访问。

答案 1 :(得分:2)

您必须考虑两种情况:

  1. 服务器端授权
  2. Android客户经理(设备方)授权
  3. 案例1: Google帐户的服务器端撤销可以在以下位置完成:https://accounts.google.com/IssuedAuthSubTokens

    您只需使用相应的Google帐户登录,然后选择撤消应用/网站

    案例2: 如果在您的Android设备上,您会看到一个屏幕,上面写着:“应用程序想要访问您的Google帐户....允许/拒绝?”然后这是一个客户经理类型授权,您需要修改您的sqlite3数据库电话是为了撤销申请(不像案例1那么简单,这需要root访问你的手机):

    我。首先将数据库和日志文件(accounts.db和accounts.db-journal)复制到另一个位置(例如:在SD卡上或计算机上)。数据库文件可以在Android设备上的这个目录中找到:

    /data/system/users/0/accounts.db
    /data/system/users/0/accounts.db-journal
    

    II。你现在需要一个sqlite3编辑器。我使用了Google Play商店中的Sqlite Debugger。或者,您可以使用http://www.sqlite.org/download.html中的sqlite3二进制文件,并在计算机上执行此操作。

    III。您知道需要使用编辑器删除accounts.db数据库的“extras”表中的某些条目。您可能希望对sqlite命令进行快速教程,但这里有一些示例,“Sqlite Debugger”使这很容易学习:

    首先在编辑器中打开accounts.db文件

    要列出表“extras”中的所有行,您可以使用以下命令:

    SELECT * from extras
    

    更好的想法是只列出表“extras”中的行,这些行对应于您要撤消的应用程序。例如,如果“com.someapp”是您的应用程序的名称,则可以使用以下命令:

    SELECT * from extras WHERE key like '%com.someapp%'
    

    你应该得到一些类似的输出:

    id|accountsid|key|value
    10|1|perm.xxxxxxxxxxxxxxxxxxxxxxxxxxx.oauth2:https://google.com/|1
    11|1|EXP:xxxxxxxxxxxxxxxxxxxxxxxxxxxx.oauth2:https://google.com/|xxxxxxx
    

    记下要从上面的输出中删除的ID号(即与要撤消的App对应的行),然后使用以下命令删除这些行:

    DELETE from extras where _id = 10
    DELETE from extras where _id = 11
    

    将数据库和日志文件复制回原始位置。确保将权限和所有权设置回原始版本。仅对所有者和组进行读/写,所有者和组所有者都是“系统”。此操作将需要root访问权限!

    重新启动您的设备,您应该已取消该应用的权限。您可以通过要求应用再次请求授权来测试此问题。如果您看到要求您授权应用的屏幕(“应用程序想要访问您的Google帐户......允许/拒绝?”),那么您已成功撤销该应用。

    参考文献:

    1. https://groups.google.com/forum/#!topic/android-developers/3lQb83jeyE8
    2. https://github.com/jberkel/sms-backup-plus/issues/369

答案 2 :(得分:1)

卸载并重新启动设备就是答案 在重新启动之前我必须给它一些时间。

更新......有人说这只会有效。