Категория > Новости > Android: ошибки работы с разрешениями и библиотека Security-App-Authenticator - «Новости»
Android: ошибки работы с разрешениями и библиотека Security-App-Authenticator - «Новости»5-09-2021, 00:00. Автор: Сильвия |
Common mistakes when using permissions in Android — статья об ошибках, которые допускают разработчики при декларации собственных разрешений. Преамбула: в Android есть система разрешений (permissions). Разрешения могут быть уровня normal (они предоставляются без вопросов), dangerous (приложение обязано запросить разрешение у пользователя), signature (приложение должно быть подписано тем же ключом, что и компонент, предоставляемый по разрешению) и нескольких других системных типов, используемых только приложениями из комплекта прошивки. Кроме того, приложения могут декларировать свои собственные разрешения, которые должны использовать другие приложения для доступа к возможностям этого приложения (запускать активности, получать данные из content provider’ов и так далее). Декларация таких разрешений в манифесте выглядит примерно так:
<permission android:name="com.mycoolcam.USE_COOL_CAMERA" android:protectionLevel="dangerous" />
<activity android:name=".CoolCamActivity" android:exported="true" android:permission="com.mycoolcam.USE_COOL_CAMERA">
<intent-filter>
<action android:name="com.mycoolcam.LAUNCH_COOL_CAM" />
<category android:name="android.intent.category.DEFAULT" />
intent-filter>
activity>
Сейчас доступ к активности А теперь ошибки, которые совершают разработчики, когда декларируют свои разрешения и защищают ими компоненты:
РазработчикуБиблиотека Security-App-AuthenticatorHands on with Jetpack’s Security App Authenticator library — небольшая заметка о новой библиотеке в комплекте Android Jetpack. Библиотека нужна для проверки подлинности сертификатов приложений, с которыми будет контактировать твое приложение. Делается это с помощью сверки контрольной суммы сертификата приложения и его сравнения с уже сохраненным списком контрольных сумм. Этакий SSL Pinning для приложений. Перед тем как использовать библиотеку, в каталог подкаталоге
<?xml version="1.0" encoding="utf-8"?>
<app-authenticator>
<expected-identity>
<package name="com.example.app">
<cert-digest>7d5ac0f764d5ae47a051777bb5fc9a96f30b6b4d3bbb95cddb1c32932fb28b10cert-digest>
package>
expected-identity>
app-authenticator>
Этот файл говорит, что приложение с именем пакета Далее можно начать использовать библиотеку:
// Создаем экземпляр аутентификатора из описанного выше XML-файла
val authenticator = AppAuthenticator.createFromResource(context, R.xml.expected_app_identities)
// Первый способ проверки сертификата
val result = when (authenticator.checkAppIdentity("com.example.app")) {
AppAuthenticator.SIGNATURE_MATCH -> "Signature matches"
AppAuthenticator.SIGNATURE_NO_MATCH -> "Signature does not match"
else -> return
}
// Второй способ проверки с выбросом исключения
try {
authenticator.enforceAppIdentity("com.example.app)
// ...работаем с приложением
} catch (e: SecurityException) {
// ...не стоит доверять этому приложению
}
Как видно, есть несколько способов проверки. Первый удобно использовать для простых проверок. Второй удобен для использования в функциях работы с проверяемым приложением. Просто добавляем в их начало проверку, и все остальное сделает система обработки исключений. Перейти обратно к новости |