使用 Azure AD B2C 在 Android 應用程式中設定驗證選項
本文描述如何啟用、自訂和增強 Android 應用程式的 Azure Active Directory B2C (Azure AD B2C) 驗證體驗。
開始之前,請先閱讀下列文章:
使用自訂網域
透過使用自訂網域,您可以完全標記驗證 URL。 就使用者而言,使用者在驗證過程中一直停留在您的網域中,並沒有重新導向至 Azure AD B2C b2clogin.com 網域名稱。
若要移除 URL 中對 "b2c" 的所有參考,您也可以將驗證要求 URL 中的 B2C 租用戶名稱 contoso.onmicrosoft.com 換成您自己的租用戶識別碼 GUID。 例如,您可以將 https://fabrikamb2c.b2clogin.com/contoso.onmicrosoft.com/
變更為 https://account.contosobank.co.uk/<tenant ID GUID>/
。
若要在驗證 URL 中使用自訂網域和您的租用戶識別碼,請遵循啟用自訂網域中的指引。 尋找您的 Microsoft 驗證程式庫 (MSAL) 設定物件,接著將 authorities 更新為您的自訂網域名稱和租用戶識別碼。
下列 Kotlin 程式碼會顯示變更之前的 MSAL 設定物件:
val parameters = AcquireTokenParameters.Builder()
.startAuthorizationFromActivity(activity)
.fromAuthority("https://contoso.b2clogin.com/fabrikamb2c.contoso.com/B2C_1_susi")
// More settings here
.build()
b2cApp!!.acquireToken(parameters)
下列 Kotlin 程式碼會顯示變更之後的 MSAL 設定物件:
val parameters = AcquireTokenParameters.Builder()
.startAuthorizationFromActivity(activity)
.fromAuthority("https://custom.domain.com/00000000-0000-0000-0000-000000000000/B2C_1_susi")
// More settings here
.build()
b2cApp!!.acquireToken(parameters)
預先填入登入名稱
在登入使用者旅程圖中,您的應用程式可能會將特定使用者當作目標。 當應用程式將使用者當作目標時,可在授權要求中指定 login_hint
查詢參數與使用者的登入名稱。 Azure AD B2C 會自動填入登入名稱,而使用者只需提供密碼。
若要預先填入登入名稱,請執行下列動作:
- 如果您使用自訂原則,請新增必要的輸入宣告,如設定直接登入中所述。
- 尋找您的 MSAL 設定物件,然後透過登入提示新增
withLoginHint()
方法。
val parameters = AcquireTokenParameters.Builder()
.startAuthorizationFromActivity(activity)
.withLoginHint("bob@contoso.com")
// More settings here
.build()
b2cApp!!.acquireToken(parameters)
預先選取識別提供者
如果您已將應用程式的登入旅程圖設定為包含社交帳戶 (例如 Facebook、LinkedIn 或 Google),您可以指定 domain_hint
參數。 此查詢參數會向 Azure AD B2C 提供應該用於登入的社交識別提供者相關提示。 例如,如果應用程式指定 domain_hint=facebook.com
,則登入流程會直接移至 Facebook 登入頁面。
若要將使用者重新導向至外部識別提供者,請執行下列動作:
- 檢查外部識別提供者的網域名稱。 如需詳細資訊,請參閱將登入重新導向至社交提供者。
- 建立或使用現有的清單物件來儲存額外的查詢參數。
- 將具有對應功能變數名稱的
domain_hint
參數加入至清單 (例如facebook.com
)。 - 將額外的查詢參數清單傳遞至 MSAL 設定物件的
withAuthorizationQueryStringParameters
方法。
val extraQueryParameters: MutableList<Pair<String, String>> = ArrayList()
extraQueryParameters.add(Pair("domain_hint", "facebook.com"))
val parameters = AcquireTokenParameters.Builder()
.startAuthorizationFromActivity(activity)
.withAuthorizationQueryStringParameters(extraQueryParameters)
// More settings here
.build()
b2cApp!!.acquireToken(parameters)
指定 UI 語言
Azure AD B2C 中的語言自訂,可讓您的使用者流程容納各種不同語言,以符合客戶的需求。 如需詳細資訊,請參閱語言自訂。
若要設定慣用語言,請執行下列動作:
- 設定語言自訂。
- 建立或使用現有的清單物件來儲存額外的查詢參數。
- 將具有對應語言代碼的
ui_locales
參數新增至清單,例如en-us
。 - 將額外的查詢參數清單傳遞至 MSAL 設定物件的
withAuthorizationQueryStringParameters
方法。
val extraQueryParameters: MutableList<Map.Entry<String, String>> = ArrayList()
val mapEntry = object : Map.Entry<String, String> {
override val key: String = "ui_locales"
override val value: String = "en-us"
}
extraQueryParameters.add(mapEntry )
val parameters = AcquireTokenParameters.Builder()
.startAuthorizationFromActivity(activity)
.withAuthorizationQueryStringParameters(extraQueryParameters)
// More settings here
.build()
b2cApp!!.acquireToken(parameters)
傳遞自訂查詢字串參數
使用自訂原則,您可以傳遞自訂查詢字串參數。 想要以動態方式變更頁面內容,就是個良好的使用案例範例。
若要傳遞自訂查詢字串參數,請執行下列動作:
- 設定 ContentDefinitionParameters 元素。
- 建立或使用現有的清單物件來儲存額外的查詢參數。
- 新增自訂查詢字串參數,例如
campaignId
。 設定參數值,例如germany-promotion
。 - 將額外的查詢參數清單傳遞至 MSAL 設定物件的
withAuthorizationQueryStringParameters
方法。
val extraQueryParameters: MutableList<Pair<String, String>> = ArrayList()
extraQueryParameters.add(Pair("campaignId", "germany-promotion"))
val parameters = AcquireTokenParameters.Builder()
.startAuthorizationFromActivity(activity)
.withAuthorizationQueryStringParameters(extraQueryParameters)
// More settings here
.build()
b2cApp!!.acquireToken(parameters)
傳遞識別碼權杖提示
信賴憑證者應用程式可以將輸入 JSON Web 權杖 (JWT) 放入 OAuth2 授權要求中傳送。 輸入權杖是關於使用者或授權要求的提示。 Azure AD B2C 會驗證權杖,然後擷取宣告。
若要在驗證要求中包含識別碼權杖提示,請執行下列動作:
- 在您的自訂原則中,定義識別碼權杖提示技術設定檔。
- 在您的程式碼中,產生或取得識別碼權杖,然後將權杖設定為變數 (例如
idToken
)。 - 建立或使用現有的清單物件來儲存額外的查詢參數。
- 使用儲存識別碼權杖的對應變數來新增
id_token_hint
參數。 - 將額外的查詢參數清單傳遞至 MSAL 設定物件的
withAuthorizationQueryStringParameters
方法。
val extraQueryParameters: MutableList<Pair<String, String>> = ArrayList()
extraQueryParameters.add(Pair("id_token_hint", idToken))
val parameters = AcquireTokenParameters.Builder()
.startAuthorizationFromActivity(activity)
.withAuthorizationQueryStringParameters(extraQueryParameters)
// More settings here
.build()
b2cApp!!.acquireToken(parameters)
內嵌的 Web 檢視體驗
互動式驗證一定會使用到網頁瀏覽器。 依預設,MSAL 程式庫會使用系統 Web 檢視。 在登入期間,MSAL 程式庫會以 Azure AD B2C 使用者介面來顯示 Android 系統 Web 檢視。
如需詳細資訊,請參閱使用 MSAL 在 Android 上啟用跨應用程式的 SSO 一文。
視您的需求而定,您可以使用內嵌的 Web 檢視。 內嵌的 Web 檢視與 MSAL 中的系統 Web 檢視之間有視覺效果和單一登入行為的差異。
重要
建議您使用平台預設值,這通常是系統瀏覽器。 系統瀏覽器更適合用來記住先前登入過的使用者。 某些識別提供者 (例如 Google) 不支援內嵌檢視體驗。
若要變更此行為,請開啟 app/src/main/res/raw/auth_config_b2c.json 檔案。 然後,新增具有 WEBVIEW
值的 authorization_user_agent
屬性。 下列範例示範如何將 Web 檢視類型變更為內嵌檢視:
{
"authorization_user_agent": "WEBVIEW"
}
後續步驟
- 若要深入了解 Android 設定,請參閱 Android 設定選項的 MSAL。