カスタムのオーセンティケーターがあり、ユーザー/パスワードを他のアプリケーションに公開したいと考えています。getAuthToken()
ランダムなアプリが資格情報を取得するのを防ぐために、カスタム認証システムのメソッドでアクセス許可チェックのようなものを実行したいと思います。正しい方法は何ですか?
私はこれを試しました、
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);
認証トークンの取得に成功しました。デバッグは、オーセンティケーターのgetAuthToken()
メソッドへの呼び出しが発生したことを示していますが、アクセス許可のチェック呼び出しは「許可」を返しました。
編集:呼び出しに使用しているコンテキストからパッケージ名を取得した場合、checkCallingPermission()
それはカスタム認証システムをホストしているアプリのパッケージ名です。呼び出し元の PID、UID を取得すると、それぞれ 0 と 1000 になります。
何か案は?