როგორ უზრუნველვყოთ უსაფრთხო წვდომა სხვა აპლიკაციისთვის ავტორიზაციის ტოკენზე?
sobes.tech AI
პასუხი AI-სგან
Күп төрле ысуллар бар:
-
Чикләнгән керү белән Контент Провайдеры: Үзегезнең
ContentProviderтудырыгыз, ул токен алу логикасын тормышка ашыра. Аңа керүне рөхсәтләр (permissions) ярдәмендә чикләгез, алар сезнең кушымта манифестында билгеләнә. Башка кушымта бу рөхсәтне сорарга тиеш, шуннан соң ул Content Providerга керә алачак.<!-- Сезнең кушымта 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>// Контент Провайдерның тормышка ашыру мисалы public class TokenContentProvider extends ContentProvider { // ... query() реализациясе рөхсәтне тикшерү белән ... }Башка кушымта бу рөхсәтне сорарга тиеш:
<!-- Башка кушымта AndroidManifest.xmlында --> <uses-permission android:name="com.your_app.PERMISSION_GET_TOKEN" />protectionLevel="signature"дәрәҗәсе гарантияли, бу Content Providerга керүне шул ук ачкыч белән имзалган кушымталар гына ала ала. Бу кушымталар арасында мәгълүмат алмашу өчен иң куркынычсыз ысул. -
Service белән тоташу һәм UID/PackageName тикшерү:
Serviceтудырыгыз, ул токен алу өчен методны тәэмин итә. Башка кушымта бу хезмәткә тоташып (bindService) ала. Хезмәт эчендә, сорау эшкәртелгәндә, чакырган кушымтаның UID яки PackageName алынып, ышанычлы икәнен тикшерә аласыз.// AIDL белән Service тормышка ашыру мисалы 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("Рөхсәтсез керү"); } } }; @Nullable @Override public IBinder onBind(Intent intent) { return binder; } }AIDL (Android Interface Definition Language) — бу межпроцесслы аралашу өчен интерфейс билгели.
-
SharedPreferences
MODE_WORLD_READABLEрежимында (тәкъдим ителми): ТокенныSharedPreferencesка саклагыз,MODE_WORLD_READABLEфлагы белән. Бу һәркемгә бу файлны укырга мөмкинлек бирә. Бу ысул искергән һәм куллану тәкъдим ителми, чөнки куркынычсызлык дәрәҗәсе түбән.// Куркынычсыз түгел ысул (искергән) SharedPreferences preferences = getSharedPreferences("token_prefs", Context.MODE_WORLD_READABLE); String token = preferences.getString("auth_token", null); -
Intent аша тапшыру чикләүләр белән: Токенны
Intentаша тапшырыгыз (мәсәлән,startActivityбелән). Әмма бу иң куркынычсыз ысул түгел, чөнкиIntentэчендәге мәгълүматлар утыртыла ала. Әгәр бу ысул белән тапшыру кирәк икән, шифрланган мәгълүматлар кулланыгыз һәм санлы имза яки кабул итүче кушымтаның PackageName тикшерегез.// Мисал (өстәмә куркынычсызлык чаралары таләп ителә) Intent intent = new Intent("com.other_app.ACTION_RECEIVE_TOKEN"); intent.putExtra("token", "your_auth_token"); // Токен шифрланырга тиеш startActivity(intent);
Төгәл сайлау куркынычсызлык таләпләренә һәм ышаныч дәрәҗәсенә бәйле. Иң куркынычсызлары — Content Provider һәм Service, аларда ачык рәвештә чакырган кушымтаны тикшерү.