Wie gewährleistet man einen sicheren Zugriff auf das Autorisierungstoken für eine andere Anwendung?
sobes.tech KI
Antwort von AI
Es können mehrere Methoden in Betracht gezogen werden.
-
Content Provider mit eingeschränktem Zugriff: Erstellen Sie einen eigenen
ContentProvider, in dem die Logik zum Abrufen des Tokens implementiert wird. Den Zugriff beschränken Sie mit Berechtigungen, die im Manifest Ihrer Anwendung definiert werden. Eine andere Anwendung muss diese Berechtigung anfordern, um auf den Content Provider zugreifen zu können.<!-- In AndroidManifest.xml Ihrer Anwendung --> <permission android:name="com.your_app.PERMISSION_GET_TOKEN" android:label="@string/permission_get_token_label" android:description="@string/permission_get_token_description" android:protectionLevel="signature" /> <application ...> <provider android:name=".TokenContentProvider" android:authorities="com.your_app.token_provider" android:exported="true" android:readPermission="com.your_app.PERMISSION_GET_TOKEN" ... /> </application>// Beispiel für die Implementierung eines ContentProviders public class TokenContentProvider extends ContentProvider { // ... Implementierung von query() zum Ausgeben des Tokens mit Berechtigungsprüfung ... }Eine andere Anwendung muss die Anfrage für diese Berechtigung deklarieren:
<!-- In AndroidManifest.xml der anderen Anwendung --> <uses-permission android:name="com.your_app.PERMISSION_GET_TOKEN" />Der
protectionLevel="signature"stellt sicher, dass nur Anwendungen, die mit demselben Schlüssel signiert sind, Zugriff auf den Content Provider haben. Dies ist die sicherste Methode für den Datenaustausch zwischen Anwendungen desselben Unternehmens (derselben Entwickler). -
Service mit Bindung und UID/PackageName-Überprüfung: Erstellen Sie einen Service (
Service), der eine Methode zum Abrufen des Tokens bereitstellt. Eine andere Anwendung kann sich an diesen Service (bindService) binden. Innerhalb des Dienstes kann beim Verarbeiten der Anfrage die UID oder der PackageName des aufrufenden Anwendungsprogramms ermittelt und überprüft werden, ob es vertrauenswürdig ist.// Beispiel für die Implementierung eines Service mit AIDL public class TokenService extends Service { private ITokenService.Stub binder = new ITokenService.Stub() { @Override public String getToken() throws RemoteException { // Überprüfung des aufrufenden Programms anhand getCallingUid() oder getPackagesForUid() String[] packages = getPackageManager().getPackagesForUid(Binder.getCallingUid()); // Überprüfung der Pakete auf die Liste der erlaubten if (isAllowedPackage(packages)) { // Token zurückgeben (angenommen, das Token wird sicher gespeichert) return "your_auth_token"; } else { throw new SecurityException("Unbefugter Zugriff"); } } }; @Nullable @Override public IBinder onBind(Intent intent) { return binder; } }AIDL (Android Interface Definition Language) wird verwendet, um die Service-Schnittstelle für die Interprozesskommunikation zu definieren.
-
SharedPreferences mit
MODE_WORLD_READABLE(nicht empfohlen): Speichern Sie das Token inSharedPreferencesmit der FlaggeMODE_WORLD_READABLE. Dies ermöglicht jedem Programm, diese Datei zu lesen. Diese Methode ist veraltet und wird aufgrund der niedrigen Sicherheitsebene nicht empfohlen.// Unsicherer, veralteter Ansatz SharedPreferences preferences = getSharedPreferences("token_prefs", Context.MODE_WORLD_READABLE); String token = preferences.getString("auth_token", null); -
Übergabe über Intent mit Einschränkungen: Übergeben Sie das Token über
Intent(z.B. überstartActivitymit Daten). Dies ist jedoch die unsicherste Methode, da die Daten im Intent abgefangen werden können. Wenn das Token auf diese Weise übertragen werden muss, sollten verschlüsselte Daten verwendet und digitale Signaturen oder PackageName des empfangenden Programms überprüft werden.// Beispiel (erfordert zusätzliche Sicherheitsmaßnahmen) Intent intent = new Intent("com.other_app.ACTION_RECEIVE_TOKEN"); intent.putExtra("token", "your_auth_token"); // Das Token sollte verschlüsselt sein startActivity(intent);
Die Wahl der Methode hängt von den Sicherheitsanforderungen und dem Vertrauensniveau zwischen Ihrer Anwendung und der Anwendung ab, die Zugriff auf das Token benötigt. Die sichersten Methoden sind Content Provider und Service mit expliziter Überprüfung des aufrufenden Programms.