Kuidas tagada turvaline juurdepääs autoriseerimismärgisele teisele rakendusele?
sobes.tech AI
Vastus AI-lt
On mitu mitmeid viise:
-
Content Provider piiratud juurdepääsuga: Looge oma
ContentProvider, mis teostab tokeni saamise loogika. Piirake sellele juurdepääsu kasutades lube (permissions), mis määratakse teie rakenduse manifestis. Teine rakendus peab taotlema seda luba, et pääseda Content Provider'ile.<!-- Teie rakenduse 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>// Näide ContentProvider'i rakendamisest public class TokenContentProvider extends ContentProvider { // ... query() rakendamine loa kontrolliga ... }Teine rakendus peab deklareerima selle loa:
<!-- Teise rakenduse AndroidManifest.xml --> <uses-permission android:name="com.your_app.PERMISSION_GET_TOKEN" />protectionLevel="signature"tase tagab, et juurdepääs Content Provider'ile on ainult sama võtmega allkirjastatud rakendustel. See on kõige turvalisem viis andmete vahetamiseks rakenduste vahel. -
Service ühenduse ja UID/PackageName kontrolliga: Looge
Service, mis pakub meetodit tokeni saamiseks. Teine rakendus saab selle teenusega ühenduda (bindService). Teenuse sees, töötlemisel, saate saada kutsuva rakenduse UID või PackageName ja kontrollida, kas see on usaldusväärne.// Näide Service'i rakendamisest AIDL-iga 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("Lubaata juurdepääs"); } } }; @Nullable @Override public IBinder onBind(Intent intent) { return binder; } }AIDL (Android Interface Definition Language) kasutatakse teenuse liidese määratlemiseks protsessidevaheliseks suhtluseks.
-
SharedPreferences
MODE_WORLD_READABLErežiimis (mitte soovitatav): Salvestage tokenSharedPreferences-i, millel onMODE_WORLD_READABLElipp. See võimaldab kõigil rakendustel seda faili lugeda. See meetod on vananenud ja seda ei soovitata kasutada madala turvalisuse taseme tõttu.// Ebaturvaline meetod (vananenud) SharedPreferences preferences = getSharedPreferences("token_prefs", Context.MODE_WORLD_READABLE); String token = preferences.getString("auth_token", null); -
Token edastamine Intent'iga piirangutega: Saadke token
Intent-i kaudu (näiteksstartActivitykoos andmetega). Kuid see on kõige vähem turvaline viis, kuna Intent'i andmeid saab pealt kuulata. Kui on vaja seda meetodit kasutada, kasutage krüpteeritud andmeid ning kontrollige digiallkirja või PackageName.// Näide (vajab täiendavaid turvameetmeid) Intent intent = new Intent("com.other_app.ACTION_RECEIVE_TOKEN"); intent.putExtra("token", "your_auth_token"); // Token peab olema krüpteeritud startActivity(intent);
Valik sõltub turvanõuetest ja usaldustasemest teie rakenduse ja selle rakenduse vahel, millele on vaja juurdepääsu tokenile. Kõige turvalisemad on Content Provider ja Service, millel on selge kutsuja kontroll.