ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

android-是否可以在不触发“权限请求”对话框的情况下从AccountManager获取身份验证令牌?

2019-10-31 16:24:47  阅读:320  来源: 互联网

标签:accountmanager oauth single-sign-on android


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

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

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

我的应用程序和Chrome均未预先安装,因此两种情况下的检查均不正确.我的应用程序当然不能与Google帐户身份验证器共享UID,并且我认为Chrome可能与Google身份验证器共享UID,因为Google创建了这两个身份验证器.如果是这种情况,那么它将解释为什么Chrome不显示任何对话框.

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

解决方法:

不,不可能

在更仔细地阅读了Android源代码之后,我看到方法hasAuthenticatorUid()不仅在UID相同的情况下返回true,而且在应用程序使用与身份验证器相同的签名进行签名的情况下,也会返回true.

为了验证Chrome是否是这种情况,我使用了Chrome APK文件中的android-apktool来查看Chrome的manifest.xml.在那里,我可以看到Chrome不使用与身份验证器共享的UID.

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

因此,很明显,Chrome和身份验证器是使用相同的密钥签名的,这就是Chrome如何自动获取其他第三方应用程序无法获取的权限.

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

标签:accountmanager,oauth,single-sign-on,android
来源: https://codeday.me/bug/20191031/1977090.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有