检查自定义帐户验证器中的权限



我有一个自定义身份验证器,并且我想将用户/密码暴露给其他应用程序。为了防止任何随机应用程序获得凭据,我想在我的自定义身份验证器的getAuthToken()方法中执行权限检查之类的操作。正确的方法是什么?

i tried this,

    int p = context.checkCallingPermission("com.whatever.AUTH");
    if (p != PackageManager.PERMISSION_GRANTED) {
"com.whatever

。AUTH"在承载我的认证器的应用程序中定义,

<permission android:name="com.vmware.horizon.AUTH" />

然而,在我的测试应用程序中,它的清单中没有uses-permission,当我请求帐户时,

    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);

i成功获取认证令牌。调试表明,通过我的认证者的getAuthToken()方法调用发生,但检查权限调用返回"授予"。

编辑:如果我从上下文中得到包名,我用来调用checkCallingPermission(),它是托管自定义身份验证器的应用程序的包名。如果我得到调用PID, UID,它们分别是0和1000。

任何想法?

查看Android源代码时,我注意到帐户管理器服务将Bundle上调用者的pid和uid设置为AccountManager.KEY_CALLER_PIDAccountManager.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>

验证器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"/>

相关内容

  • 没有找到相关文章

最新更新