Руководство. Подготовка мобильного приложения Android для собственной проверки подлинности
В этом руководстве показано, как добавить собственный пакет SDK для проверки подлинности Microsoft Authentication Library (MSAL) в мобильное приложение Android.
В этом руководстве описано следующее:
- Добавьте зависимости MSAL.
- Создание файла конфигурации
- Создание экземпляра пакета SDK MSAL.
Необходимые компоненты
- Если вы еще не сделали этого, следуйте инструкциям в разделе "Вход пользователей" в примере мобильного приложения Android (Kotlin) с помощью собственной проверки подлинности и регистрации приложения во внешнем клиенте. Убедитесь, что выполните следующие действия.
- Зарегистрируйте приложение.
- Включите общедоступный клиент и собственные потоки проверки подлинности.
- Предоставьте разрешения API.
- Создание потока пользователей.
- Свяжите приложение с потоком пользователя.
- Проект Android. Если у вас нет проекта Android, создайте его.
Добавление зависимостей MSAL
Откройте проект в Android Studio или создайте новый проект.
Откройте приложение
build.gradle
и добавьте следующие зависимости:allprojects { repositories { //Needed for com.microsoft.device.display:display-mask library maven { url 'https://pkgs.dev.azure.com/MicrosoftDeviceSDK/DuoSDK-Public/_packaging/Duo-SDK-Feed/maven/v1' name 'Duo-SDK-Feed' } mavenCentral() google() } } //... dependencies { implementation 'com.microsoft.identity.client:msal:5.+' //... }
В Android Studio выберите проект синхронизации файлов>с файлами Gradle.
Создание файла конфигурации
Необходимо передать необходимые идентификаторы клиента, например идентификатор приложения (клиента), в пакет SDK MSAL через параметр конфигурации JSON.
Чтобы создать файл конфигурации, выполните следующие действия.
На панели проекта Android Studio перейдите к app\src\main\res.
Щелкните правой кнопкой мыши res и выберите новый>каталог. Введите
raw
имя нового каталога и нажмите кнопку "ОК".В app\src\main\res\raw создайте новый JSON-файл
auth_config_native_auth.json
.auth_config_native_auth.json
В файле добавьте следующие конфигурации MSAL:{ "client_id": "Enter_the_Application_Id_Here", "authorities": [ { "type": "CIAM", "authority_url": "https://Enter_the_Tenant_Subdomain_Here.ciamlogin.com/Enter_the_Tenant_Subdomain_Here.onmicrosoft.com/" } ], "challenge_types": ["oob"], "logging": { "pii_enabled": false, "log_level": "INFO", "logcat_enabled": true } } //...
Замените следующие заполнители значениями клиента, полученными из Центра администрирования Microsoft Entra:
- Замените
Enter_the_Application_Id_Here
заполнитель идентификатором приложения (клиента), зарегистрированного ранее. - Замените
Enter_the_Tenant_Subdomain_Here
поддомен каталога (клиента). Например, если основной домен клиента — этоcontoso.onmicrosoft.com
, используйтеcontoso
. Если у вас нет имени клиента, узнайте, как прочитать сведения о клиенте.
Типы вызовов — это список значений, которые приложение использует для уведомления Microsoft Entra о методе проверки подлинности, который он поддерживает.
- Для потоков регистрации и входа с помощью одноразового секретного кода электронной почты используйте
["oob"]
. - Для потоков регистрации и входа с помощью электронной почты и пароля используйте
["oob","password"]
. - Для самостоятельного сброса пароля (SSPR) используйте
["oob"]
.
Узнайте больше о типах проблем.
- Замените
Необязательно. Настройка ведения журнала
Включите ведение журнала при создании приложения, создав обратный вызов ведения журнала, чтобы пакет SDK может выводить журналы.
import com.microsoft.identity.client.Logger
fun initialize(context: Context) {
Logger.getInstance().setExternalLogger { tag, logLevel, message, containsPII ->
Logs.append("$tag $logLevel $message")
}
}
Чтобы настроить средство ведения журнала, необходимо добавить раздел в файл конфигурации: auth_config_native_auth.json
//...
{
"logging": {
"pii_enabled": false,
"log_level": "INFO",
"logcat_enabled": true
}
}
//...
- logcat_enabled. Включает функции ведения журнала библиотеки.
- pii_enabled. Указывает, регистрируются ли сообщения, содержащие персональные данные или данные организации. Если задано значение false, журналы не будут содержать персональные данные. Если задано значение true, журналы могут содержать персональные данные.
- log_level. Используйте его для выбора уровня ведения журнала. Android поддерживает следующие уровни журналов:
- ОШИБКА
- ПРЕДУПРЕЖДЕНИЕ
- INFO
- VERBOSE
Дополнительные сведения о ведении журнала MSAL см. в разделе "Ведение журнала в MSAL для Android".
Создание экземпляра пакета SDK для MSAL для собственной проверки подлинности
В методе onCreate()
создайте экземпляр MSAL, чтобы приложение могли выполнять проверку подлинности с помощью собственной проверки подлинности. Метод createNativeAuthPublicClientApplication()
возвращает вызываемого authClient
экземпляра. Передайте файл конфигурации JSON, созданный ранее в качестве параметра.
//...
authClient = PublicClientApplication.createNativeAuthPublicClientApplication(
this,
R.raw.auth_config_native_auth
)
//...
Код должен выглядеть примерно так, как показано в следующем фрагменте кода:
class MainActivity : AppCompatActivity() {
private lateinit var authClient: INativeAuthPublicClientApplication
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
authClient = PublicClientApplication.createNativeAuthPublicClientApplication(
this,
R.raw.auth_config_native_auth
)
getAccountState()
}
private fun getAccountState() {
CoroutineScope(Dispatchers.Main).launch {
val accountResult = authClient.getCurrentAccount()
when (accountResult) {
is GetAccountResult.AccountFound -> {
displaySignedInState(accountResult.resultValue)
}
is GetAccountResult.NoAccountFound -> {
displaySignedOutState()
}
}
}
}
private fun displaySignedInState(accountState: AccountState) {
val accountName = accountResult.getAccount().username
val textView: TextView = findViewById(R.id.accountText)
textView.text = "Cached account found: $accountName"
}
private fun displaySignedOutState() {
val textView: TextView = findViewById(R.id.accountText)
textView.text = "No cached account found"
}
}
- Извлеките кэшированную учетную запись с помощью
getCurrentAccount()
объекта, который возвращает объектaccountResult
. - Если учетная запись найдена в сохраняемости, используйте
GetAccountResult.AccountFound
для отображения состояния входа. - В противном случае используется
GetAccountResult.NoAccountFound
для отображения состояния выхода.
Убедитесь, что вы включили инструкции импорта. Android Studio должна включать автоматические инструкции импорта.