2013-03-11 2 views
3

사용자 지정 인증 프로그램이 있으며 다른 응용 프로그램에 사용자/암호를 노출하고 싶습니다. 임의의 응용 프로그램에서 자격 증명을 얻지 못하도록하려면 내 사용자 지정 인증 기의 getAuthToken() 메서드에서 사용 권한 확인과 같은 작업을 수행하고 싶습니다. 올바른 방법은 무엇입니까? 사용자 지정 인증 프로그램에서 사용 권한 확인

난이 시도

,

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

그러나 "com.whatever.AUTH은"내 인증을 호스팅하는 응용 프로그램에 정의되어

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

, 내 테스트 응용 프로그램에서이없는 거기에 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); 

내가 성공적으로 obta, 매니페스트의 auth 토큰에 있습니다. 디버깅은 내 인증 자의 getAuthToken() 메소드로의 호출이 발생하지만 확인 권한 호출이 "granted"로 반환되었음을 보여줍니다.

EDIT : 콘텍스트에서 패키지 이름을 얻으면 checkCallingPermission()을 호출하는 데 사용하고 있습니다. 사용자 정의 인증자를 호스팅하는 앱의 패키지 이름입니다. 호출하는 PID를 얻으면 UID는 각각 0과 1000입니다.

어떤 아이디어가 있습니까?

+0

무엇 Context.checkCallingPermission'을 사용할 때 컨텍스트입니다 – FlyingStreudel

+0

내 편집을 참조하십시오. –

+0

콘텐츠 제공자를 사용하여 모든 권한 검사를 처리 할 수 ​​없습니까? – wsanville

답변

5

Android 소스 코드를 보면 계정 관리자 서비스가 발신자의 pid 및 uid를 번들에 AccountManager.KEY_CALLER_PIDAccountManager.KEY_CALLER_UID으로 설정했음을 확인했습니다.

번들에 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"/> 
관련 문제