标签:android-authenticator android android-account
我有一个自定义身份验证器,我想将用户/密码暴露给其他应用程序.为了防止任何随机应用程序获取凭据,我想在我的自定义身份验证器的getAuthToken()方法中执行类似权限检查的操作.什么是正确的方法?
我试过这个,
int p = context.checkCallingPermission("com.whatever.AUTH");
if (p != PackageManager.PERMISSION_GRANTED) {
其中“com.whatever.AUTH”在托管我的身份验证器的应用程序中定义,
<permission android:name="com.vmware.horizon.AUTH" />
但是,在我的测试应用程序中,当我请求帐户时,它的清单中没有使用权限,
AccountManagerFuture<Bundle> future = am.getAuthToken(new Account(
"com.whatever", "com.whatever"),
"com.whatever", new Bundle(), this,
new AccountManagerCallback<Bundle>() {
@Override
public void run(AccountManagerFuture<Bundle> future) {
String token = result.getString(AccountManager.KEY_AUTHTOKEN);
}
}, handler);
我成功获得了身份验证令牌.调试显示调用我的身份验证器的getAuthToken()方法,但check权限调用返回“已授予”.
编辑:如果我从上下文中获取包名称我正在调用checkCallingPermission(),它是托管自定义身份验证器的应用程序的包名称.如果我得到调用PID,UID分别为0和1000.
有任何想法吗?
解决方法:
在查看Android源代码时,我注意到客户经理服务将调用者的pid和uid设置为Bundle,作为AccountManager.KEY_CALLER_PID和AccountManager.KEY_CALLER_UID.
您可以在bundle上使用getInt()来查找getAppToken方法中的真实调用者的pid和uid.
另一个有用的信息很难找到.由于帐户管理器服务缓存结果,因此getAppToken方法通常只调用一次.如果您希望能够更积极地管理令牌,可以通过向清单条目添加元数据来禁用缓存:
<service android:name=".authenticator.AccountAuthenticatorService">
<meta-data android:name="android.accounts.AccountAuthenticator" android:resource="@xml/authenticator"/>
<meta-data android:name="android.accounts.AccountAuthenticator.customTokens" android:value="1"/>
</service>
以下是authenticator xml的样子:
<?xml version="1.0" encoding="utf-8"?>
<account-authenticator xmlns:android="http://schemas.android.com/apk/res/android"
android:accountType="com.your.account.type"
android:customTokens="true"
android:icon="@drawable/logo"
android:smallIcon="@drawable/logo"
android:label="@string/app_name_long"/>
标签:android-authenticator,android,android-account 来源: https://codeday.me/bug/20190901/1781101.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。