繁体   English   中英

是否可以从AccountManager获取身份验证令牌而不触发“权限请求”对话框?

[英]Is it possible to get an auth token from AccountManager without triggering the “Permission request” dialog?

我正在开发一个客户端 - 服务器应用程序,并希望为用户提供单点登录,以便他们可以使用Google登录。 我打算通过使用AccountManager在手机上获取访问令牌,然后将此令牌发送到服务器以验证令牌并登录用户来实现此目的。

当我在AccountManager中调用方法getAuthToken时,会显示一个对话框,其中用户必须允许此操作,但Android上的Chrome允许您登录并将您的浏览器数据与您的Google帐户同步,而不会显示此对话框。 因此,Chrome似乎能够获取访问令牌而不向用户显示任何对话框,如果我可以对我的应用程序执行相同操作,那将非常好。

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

我的应用和Chrome都没有预先安装,因此在这两种情况下检查都是错误的。 我的应用程序当然不能与Google帐户身份验证器共享UID,并且我认为Chrome可能会与身份验证器共享UID,因为Google创建了这两者。 如果是这种情况,则可以解释为什么Chrome不会显示任何对话框。

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

不,这是不可能的

在仔细阅读Android源代码之后,我看到方法hasAuthenticatorUid()不仅在UID相同时返回true,而且如果应用程序签名时使用与签名者签名相同的签名。

要验证Chrome的情况,我在Chrome apk文件中使用了android-apktool ,以便能够查看Chrome的manifest.xml。 在那里,我可以看到Chrome不使用与身份验证器共享的UID。

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

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

因此,第三方应用程序无法获取Google帐户的令牌,而无需向用户请求权限请求权限,这毕竟是一件非常好的事情。 我不希望手机上的任何随机应用程序能够在我不知情的情况下访问我的帐户。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM