2015-04-17 11 views
5

Ich habe einen Account-Manager in Android implementiert, und ich benutze die PeekAuthToken viel in der Anwendung, um das Token zu erhalten.Android AccountManager: PeekAuthToken

Aber ich bin ein wenig verwirrt darüber im Quellcode, in der Dokumentation heißt es:

durch den Authenticator zur bestimmungsgemäßen Verwendung, nicht direkt von Anwendungen.

Warum ist das, und was wird das Problem mit dieser Methode sein, um den authToken zu bekommen?

+0

warum nicht getAuthToken verwenden? – pskink

+0

Ich frage mich, warum es verwenden, wenn peekAuthToken funktioniert, was schadet es nicht zu verwenden? –

+0

wenn sie sagen "Für die Verwendung durch den Authentifikator bestimmt, nicht direkt von Anwendungen." Ich glaube, sie wissen, was die sagen – pskink

Antwort

2

peekAuthToken intern überprüft, ob zwei UIDs gleich sind, bevor der Auth-Token providng:

  • die UID des APP, die das auth Token
  • die UID des App anfordert, dass die Authentifizierung IBinder bereitgestellt (dh , die UID, die das Konto verwaltet)

Wenn die UIDs unterschiedlich sind, erhalten Sie eine SecurityException.

Mit anderen Worten, wenn Sie den Authentifizierungsdienst mit dem Rest Ihrer App versenden, sollten Sie in Ordnung sein. (Obwohl ich immer noch getAuthToken stattdessen empfehlen würde). Wenn Sie jedoch den Authenticator in einer App versenden und peekAuthToken in einer anderen App anrufen möchten, funktioniert das nicht.

https://github.com/android/platform_frameworks_base/blob/4535e11fb7010f2b104d3f8b3954407b9f330e0f/services/core/java/com/android/server/accounts/AccountManagerService.java#L1544