Поделиться через


Руководство. Подготовка мобильного приложения Android для собственной проверки подлинности

В этом руководстве показано, как добавить собственный пакет SDK для проверки подлинности Microsoft Authentication Library (MSAL) в мобильное приложение Android.

В этом руководстве описано следующее:

  • Добавьте зависимости MSAL.
  • Создание файла конфигурации
  • Создание экземпляра пакета SDK MSAL.

Необходимые компоненты

Добавление зависимостей MSAL

  1. Откройте проект в Android Studio или создайте новый проект.

  2. Откройте приложение 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.+'
        //...
    }
    
  3. В Android Studio выберите проект синхронизации файлов>с файлами Gradle.

Создание файла конфигурации

Необходимо передать необходимые идентификаторы клиента, например идентификатор приложения (клиента), в пакет SDK MSAL через параметр конфигурации JSON.

Чтобы создать файл конфигурации, выполните следующие действия.

  1. На панели проекта Android Studio перейдите к app\src\main\res.

  2. Щелкните правой кнопкой мыши res и выберите новый>каталог. Введите raw имя нового каталога и нажмите кнопку "ОК".

  3. В app\src\main\res\raw создайте новый JSON-файл auth_config_native_auth.json.

  4. 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 
      } 
    } 
     //...
    
  5. Замените следующие заполнители значениями клиента, полученными из Центра администрирования 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 
     } 
   } 
    //...
  1. logcat_enabled. Включает функции ведения журнала библиотеки.
  2. pii_enabled. Указывает, регистрируются ли сообщения, содержащие персональные данные или данные организации. Если задано значение false, журналы не будут содержать персональные данные. Если задано значение true, журналы могут содержать персональные данные.
  3. log_level. Используйте его для выбора уровня ведения журнала. Android поддерживает следующие уровни журналов:
    1. ОШИБКА
    2. ПРЕДУПРЕЖДЕНИЕ
    3. INFO
    4. 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 должна включать автоматические инструкции импорта.

Следующий шаг