Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SecurityException when trying to add an account

I'm experimenting with Android AccountManager.

I have an Account authentication service that shows UI to enter username/password.

I go to Settings/Accounts/Add Account, choose my new account type and I'm presented with the UI.

When I click OK I get the following error

04-24 14:48:29.334: E/AndroidRuntime(386): java.lang.SecurityException: 
    caller uid 10035 is different than the authenticator's uid

The only method of MyAccountAuthenticationService:

@Override
public IBinder onBind(Intent intent) {
    return new MyAccountAuthenticator(this).getIBinder();
}

MyAccountAuthenticator:

@Override
public Bundle addAccount(AccountAuthenticatorResponse response, 
    String accountType, String authTokenType, String[] requiredFeatures, 
    Bundle options) throws NetworkErrorException {

    final Intent intent = new Intent(context, MyAccountCreatorActivity.class);
    intent.putExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE, response);
    final Bundle bundle = new Bundle();
    bundle.putParcelable(AccountManager.KEY_INTENT, intent);
    return bundle;
}

Fragment of MyAccountCreatorActivity's onClick

AccountManager accManager = AccountManager.get(this);
Account newAccount = new Account(email, MyAccountAuthenticator.ACCOUNT_TYPE);
accManager.setPassword(newAccount, password);

Exception is thrown on setPassword. I already required all the accounting permissions. I'm not sure about what could be causing this. If you need more code/information please ask.

Thank you.

like image 375
usr-local-ΕΨΗΕΛΩΝ Avatar asked Apr 24 '12 14:04

usr-local-ΕΨΗΕΛΩΝ


4 Answers

Seems obvious, but you will also see this error if your authenticator service has not been defined in AndroidManifest.xml. For example:

<service android:name="your.AuthService">
    <intent-filter>
        <action android:name="android.accounts.AccountAuthenticator" />
    </intent-filter>
    <meta-data android:name="android.accounts.AccountAuthenticator"
         android:resource="@xml/authenticator" />
</service>
like image 54
droideckar Avatar answered Nov 15 '22 06:11

droideckar


Thanks to @imran khan, I discovered that my constant value didn't match "exactly" what was in the authenticator XML definition

like image 28
usr-local-ΕΨΗΕΛΩΝ Avatar answered Nov 15 '22 07:11

usr-local-ΕΨΗΕΛΩΝ


In my case, I got this error when I ran two different flavors on the same device. The second one was trying to access the same account as the first, which caused the error.

like image 23
Steve Strates Avatar answered Nov 15 '22 07:11

Steve Strates


In my case I accidently defined AuthenticatorService in the Manifest outside the <application> tags. Moving the declaration inside <application> fixed the issue. Hope will help someone.

like image 42
Mateusz Wlodarczyk Avatar answered Nov 15 '22 06:11

Mateusz Wlodarczyk