Android 是否可以从AccountManager获取身份验证令牌而不触发;许可申请;对话

Android 是否可以从AccountManager获取身份验证令牌而不触发;许可申请;对话,android,oauth,single-sign-on,accountmanager,Android,Oauth,Single Sign On,Accountmanager,我正在开发一个客户机-服务器应用程序,希望为用户提供单点登录,让他们可以使用Google登录。我计划通过使用AccountManager在电话上获取一个访问令牌,然后将该令牌发送到服务器以验证令牌并登录用户 当我在AccountManager中调用getAuthToken方法时,会显示一个对话框,其中用户必须允许此操作,但是Android上的Chrome允许您登录并将浏览器数据与Google帐户同步,而不显示此对话框。因此,Chrome似乎能够在不向用户显示任何对话框的情况下获得访问令牌,如果我

我正在开发一个客户机-服务器应用程序,希望为用户提供单点登录,让他们可以使用Google登录。我计划通过使用AccountManager在电话上获取一个访问令牌,然后将该令牌发送到服务器以验证令牌并登录用户

当我在AccountManager中调用getAuthToken方法时,会显示一个对话框,其中用户必须允许此操作,但是Android上的Chrome允许您登录并将浏览器数据与Google帐户同步,而不显示此对话框。因此,Chrome似乎能够在不向用户显示任何对话框的情况下获得访问令牌,如果我能在我的应用程序中也能做到这一点,那就太好了

当查看Android和应用程序的源代码时,如果应用程序是预安装的应用程序,或者如果应用程序UID与验证器(Google帐户)的UID相同,则似乎会自动授予访问权限

我的应用程序和Chrome都没有预装,所以在这两种情况下检查都是假的。我的应用程序当然不能与Google帐户身份验证程序共享UID,我假设Chrome有可能与身份验证程序共享UID,因为Google创建了这两个身份验证程序。如果是这样的话,它将解释为什么Chrome不显示任何对话框


在请求可能丢失的访问令牌时,是否有其他方法不向用户显示此对话框?

不,这是不可能的

在仔细阅读Android源代码之后,我发现该方法不仅在UID相同的情况下返回true,而且在应用程序使用与authenticator相同的签名进行签名的情况下也返回true

为了验证Chrome的情况是否如此,我在Chrome apk文件中使用了,以便能够查看Chrome的manifest.xml。在那里,我可以看到Chrome没有使用身份验证器的共享UID

之后,我用自己的调试密钥重新签署了Chrome apk,并在手机上安装了该apk。当我这样做并尝试登录到Chrome时,我得到了几个“权限请求”对话框

因此,很明显,Chrome和验证器使用相同的密钥进行签名,这就是Chrome可以自动获得其他第三方应用程序无法获得的权限的方式

因此,第三方应用程序不可能在没有向请求许可的用户显示对话框的情况下获得谷歌帐户的令牌,这毕竟是一件好事。我不希望我手机上的任何随机应用程序能够在我不知情的情况下获取我帐户的访问令牌