Kā nodrošināt drošu piekļuvi autorizācijas tokenam citai lietojumprogrammai?
sobes.tech AI
Atbilde no AI
Ir ir ir:
-
Content Provider ar ierobežota piekļuve: Izveidojiet savu
ContentProvider, kas realizēs loģiku tokena saņemšanai. Ierobežojiet piekļuvi ar atļaujām (permissions), kas tiks definētas jūsu lietotnes manifestā. Cita lietotne būs jālūdz šī atļauja, lai varētu piekļūt Content Provider.<!-- Jūsu lietotnes AndroidManifest.xml --> <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>// Piemērs, kā realizēt ContentProvider public class TokenContentProvider extends ContentProvider { // ... query() realizācija ar atļaujas pārbaudi ... }Cita lietotne būs jādeklarē šī atļauja:
<!-- Citas lietotnes AndroidManifest.xml --> <uses-permission android:name="com.your_app.PERMISSION_GET_TOKEN" />protectionLevel="signature"līmenis garantē, ka piekļuve Content Provider ir tikai tam pašam parakstītajai lietotnei. Tas ir drošākais veids, kā apmainīties ar datiem starp lietotnēm. -
Service ar pievienošanos un UID/PackageName pārbaudi: Izveidojiet
Service, kas nodrošinās metodi tokena saņemšanai. Cita lietotne var pievienoties šai servisai (bindService). Servisa iekšienē, apstrādājot pieprasījumu, var iegūt izsaucējošās lietotnes UID vai PackageName un pārbaudīt tās uzticamību.// Piemērs, kā realizēt Service ar AIDL public class TokenService extends Service { private ITokenService.Stub binder = new ITokenService.Stub() { @Override public String getToken() throws RemoteException { String[] packages = getPackageManager().getPackagesForUid(Binder.getCallingUid()); if (isAllowedPackage(packages)) { return "your_auth_token"; } else { throw new SecurityException("Neatļauts piekļuve"); } } }; @Nullable @Override public IBinder onBind(Intent intent) { return binder; } }AIDL (Android Interface Definition Language) tiek izmantots, lai definētu servisa saskarni starp procesiem.
-
SharedPreferences ar režīmu
MODE_WORLD_READABLE(nav ieteicams): Saglabājiet tokenuSharedPreferencesarMODE_WORLD_READABLEflagu. Tas ļauj jebkurai lietotnei lasīt šo failu. Šis paņēmiens ir novecojis un nav ieteicams drošības līmeņa dēļ.// Nedrošs paņēmiens (novecojis) SharedPreferences preferences = getSharedPreferences("token_prefs", Context.MODE_WORLD_READABLE); String token = preferences.getString("auth_token", null); -
Pārsūtīšana ar
Intentar ierobežojumiem: Pārsūtiet tokenu arIntent(piemēram, arstartActivity). Tomēr tas ir vismazāk drošais veids, jo datiIntentvar tikt noķerti. Ja nepieciešams pārsūtīt tokenu šādā veidā, izmantojiet šifrētus datus un pārbaudiet digitālo parakstu vai PackageName.// Piemērs (prasa papildu drošības pasākumus) Intent intent = new Intent("com.other_app.ACTION_RECEIVE_TOKEN"); intent.putExtra("token", "your_auth_token"); // Tokenu jāšifrē startActivity(intent);
Izvēle ir atkarīga no drošības prasībām un uzticības līmeņa starp jūsu lietotni un lietotni, kurai nepieciešams piekļūt tokenam. Visdrošākie ir Content Provider un Service ar skaidru izsaucējošās lietotnes pārbaudi.