首页 > 解决方案 > API 21 上的 AccountManager getAuthToken SecurityException(23+ 工作)

问题描述

我正在尝试使用AccountManager.getAuthToken()我自己的身份验证器(但在具有不同签名的不同应用程序中)。我知道我需要权限GET_ACCOUNTSUSE_CREDENTIALS. 这些已添加并正在工作。

但是当我getAuthToken()第一次通过getAuthToken()-variant 调用时遇到了一个问题,它使用activity-parameter 来显示一个对话框,要求用户授予对身份验证器的访问权限 ( GrantCredentialsPermissionActivity)。

这在 API 26+ 上运行良好。显示对话框,在授予访问权限后,我得到一个令牌。

但这在 API 21 - 26 上不起作用。在这里,没有显示对话框,并且获取result失败getAuthToken()OperationCanceledExceptionlogcat 显示:

java.lang.SecurityException:要使用 KEY_INTENT 启动的活动必须共享 Authenticator 的签名

在 API 24 上,消息有更多细节:

java.lang.SecurityException:KEY_INTENT 解析为包 (android) 中的一个 Activity (android.accounts.GrantCredentialsPermissionActivity),它不与提供的身份验证器 (my.package.name) 共享签名。


但是当使用getAuthToken()带有布尔值的 -variantnotifyAuthFailure而不是activity显示触发“访问请求”对话框的通知时。并且在授予之后,可以获得令牌。


所以看起来有点奇怪。提到的对话框来自系统,而不是我的身份验证器而不是调用应用程序。在用户通过此对话框授予对它的访问权限之前,甚至不会调用身份验证器。

我认为这是一个类似于Android AccountManager 的 getAuthToken SecurityException 的问题,但没有答案。


这是我正在谈论的对话框(从http://blog.udinic.com/2013/04/24/write-your-own-android-authenticator获取):

在此处输入图像描述

标签: androidaccountmanager

解决方案


推荐阅读