適用於:
外部租用戶 (深入瞭解)
本教學課程示範如何將Microsoft驗證連結庫 (MSAL) 原生驗證 SDK 新增至 Android 行動應用程式。
在本教學課程中,您會:
- 新增 MSAL 相依性。
- 建立組態檔。
- 建立 MSAL SDK 實例。
先決條件
- 如果您尚未這麼做,請遵循 在範例 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:6.+' //... }在 Android Studio 中,選取 [檔案>同步處理專案與 Gradle 檔案。
建立組態檔
您可以透過 JSON 組態設定,將所需的租使用者識別碼,例如應用程式(用戶端)標識碼傳遞至 MSAL SDK。
使用下列步驟來建立組態檔:
在 Android Studio 的專案窗格中,瀏覽至 app\src\main\res。
以滑鼠右鍵單擊 res,然後選取 新增>目錄。 輸入
raw作為新的目錄名稱,然後選取 [確定]。在 app\src\main\res\raw中,建立名為
auth_config_native_auth.json的新 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替換為目錄(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
}
}
//...
- logcat_enabled:啟用連結庫的記錄功能。
- pii_enabled:指定是否記錄包含個人資料或組織數據的訊息。 當設定為 false 時,記錄不會包含個人資料。 當設定為 true 時,記錄可能包含個人資料。
-
log_level:使用它來決定要啟用的記錄層級。 Android 支援下列記錄層級:
- 錯誤
- 警告
- 資訊
- 冗長
如需 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 應該會自動幫您加入匯入語句。