共用方式為


教學課程:準備Android行動應用程式以進行原生驗證

適用於帶有白色核取記號符號的綠色圓圈,表示下列內容適用於外部租用戶。 外部租用戶 (深入瞭解

本教學課程示範如何將Microsoft驗證連結庫 (MSAL) 原生驗證 SDK 新增至 Android 行動應用程式。

在本教學課程中,您會:

  • 新增 MSAL 相依性。
  • 建立組態檔。
  • 建立 MSAL SDK 實例。

先決條件

  • 如果您尚未這麼做,請遵循 在範例 Android(Kotlin)行動應用程式中登入使用者 中的指示,使用原生驗證在您的外部租用戶中註冊應用程式。 請確定您完成下列步驟:
    • 註冊應用程式。
    • 啟用公用用戶端和原生驗證流程。
    • 授與 API 許可權。
    • 建立使用者流程。
    • 將應用程式與使用者流程產生關聯。
  • Android 專案。 如果您沒有Android專案,請加以建立。

新增 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:6.+'
        //...
    }
    
  3. 在 Android Studio 中,選取 [檔案>同步處理專案與 Gradle 檔案

建立組態檔

您可以透過 JSON 組態設定,將所需的租使用者識別碼,例如應用程式(用戶端)標識碼傳遞至 MSAL SDK。

使用下列步驟來建立組態檔:

  1. 在 Android Studio 的專案窗格中,瀏覽至 app\src\main\res

  2. 以滑鼠右鍵單擊 res,然後選取 新增>目錄。 輸入 raw 作為新的目錄名稱,然後選取 [確定]

  3. app\src\main\res\raw中,建立名為 auth_config_native_auth.json的新 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 替換為目錄(tenant)子域。 例如,如果您的租戶主要網域為 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. 資訊
    4. 冗長

如需 MSAL 記錄的詳細資訊,請參閱 在 MSAL for Android 中記錄

建立原生驗證 MSAL SDK 實例

在方法中 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(accountResult: 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 應該會自動幫您加入匯入語句。

後續步驟