使用 MSAL 在 Android 上啟用跨應用程式 SSO

單一登錄 (SSO) 可讓使用者只輸入其認證一次,並讓這些認證自動跨應用程式運作。

Microsoft 身分識別平台 和 Microsoft 驗證連結庫 (MSAL) 可協助您跨自己的應用程式套件啟用 SSO。 透過訊息代理程式和 Authenticator 應用程式,您可以跨整個裝置擴充 SSO。

在此操作說明中,您將瞭解如何設定應用程式用來為客戶提供 SSO 的 SDK。

必要條件

本作法假設您知道如何:

  • 布建您的應用程式。 如需詳細資訊,請參閱在Android教學課程中 建立應用程式的指示
  • 整合您的應用程式與適用於Android的 MSAL

SSO 的方法

使用適用於 Android 的 MSAL 來達成 SSO 的應用程式有兩種方式:

透過代理驗證的 SSO

建議您使用 Microsoft 的其中一個驗證代理人參與全裝置 SSO,並符合組織條件式存取原則。 與訊息代理程式整合提供下列優點:

  • 裝置 SSO
  • 條件式存取:
    • Intune 應用程式防護
    • 裝置註冊(加入工作場所)
    • 行動裝置管理
  • 全裝置帳戶管理
    • 透過 Android AccountManager 和帳戶 設定
    • “Work Account” - 自定義帳戶類型

在Android上,Microsoft Authentication Broker 是包含在 Microsoft AuthenticatorIntune 公司入口網站 應用程式中的元件。

下圖說明您的應用程式、MSAL 和 Microsoft 驗證代理程式之間的關聯性。

Diagram showing how an application relates to MSAL, broker apps, and the Android account manager.

安裝裝載訊息代理程式的應用程式

代理程式裝載應用程式可以隨時由裝置擁有者從其 App Store 安裝(通常是 Google Play Store)。 不過,某些 API(資源)會受到條件式存取原則的保護,這些原則需要裝置:

  • 已註冊(已加入工作場所)和/或
  • 註冊 裝置管理 或
  • 已在 Intune 應用程式保護中註冊

如果裝置尚未安裝訊息代理程式應用程式,MSAL 會指示使用者在應用程式嘗試以互動方式取得令牌時立即安裝一個。 然後,應用程式必須引導使用者完成步驟,使裝置符合所需的原則。

安裝和卸載訊息代理程式的效果

安裝訊息代理程式時

在裝置上安裝訊息代理程式時,所有後續的互動式令牌要求(話叫 acquireToken())都會由訊息代理程序處理,而不是由MSAL在本機處理。 任何先前提供給 MSAL 的 SSO 狀態都不適用於訊息代理程式。 因此,用戶必須再次驗證,或從裝置已知的現有帳戶清單中選取帳戶。

安裝訊息代理程式不需要使用者再次登入。 只有當使用者需要解析 MsalUiRequiredException 時,下一個要求才會移至訊息代理程式。 MsalUiRequiredException 可能會因為數個原因而擲回,而且需要以互動方式解析。 例如:

  • 用戶已變更與其帳戶相關聯的密碼。
  • 用戶帳戶不再符合條件式存取原則。
  • 用戶撤銷了同意讓應用程式與其帳戶相關聯。

多個訊息代理程式 - 如果裝置上安裝多個訊息代理 程式,則先安裝的訊息代理程式一律是作用中的訊息代理程式。 裝置上只能有單一訊息代理程式。

卸載訊息代理程式時

如果只安裝一個訊息代理程式裝載應用程式,且已移除,則用戶必須再次登入。 卸載主動代理程式會從裝置移除帳戶和相關聯的令牌。

如果已安裝 Intune 公司入口網站 且以作用中訊息代理程序運作,而且也會安裝 Microsoft Authenticator,則如果 Intune 公司入口網站 (active broker) 已卸載,使用者就必須再次登入。 一旦他們再次登入,Microsoft Authenticator 應用程式就會成為作用中的訊息代理程式。

與訊息代理程式整合

產生訊息代理程式重新導向 URI

提示

本文中的步驟可能會根據您從開始的入口網站稍有不同。

您必須註冊與訊息代理程式相容的重新導向 URI。 訊息代理程式的重新導向 URI 應包含應用程式的套件名稱,以及應用程式簽章的 Base64 編碼表示法。

重新導向 URI 格式為: msauth://<yourpackagename>/<base64urlencodedsignature>

您可以使用 keytool 來使用應用程式的簽署金鑰來產生Base64編碼的簽章哈希,然後使用該哈希產生您的重新導向URI。

Linux 和 macOS:

keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64

Windows:

keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | openssl sha1 -binary | openssl base64

使用keytool產生簽章哈希之後,請使用 Azure 入口網站 來產生重新導向 URI:

  1. 以至少雲端應用程式 管理員 istrator 身分登入 Microsoft Entra 系統管理中心
  2. 如果您有多個租使用者的存取權,請使用頂端功能表中的 [設定] 圖示,從 [目錄 + 訂用帳戶] 功能表切換至包含應用程式註冊的租使用者。
  3. 流覽至 [身分>識別應用程式> 應用程式註冊]。
  4. 選取您的應用程式,然後選取 [驗證>][新增平臺>Android]。
  5. 在開啟的 [ 設定 Android 應用程式 ] 窗格中,輸入 您稍早產生的簽章哈希 和套件 名稱
  6. 選取 [設定] 按鈕。

重新導向 URI 會為您產生,並顯示在 [Android 組態 ] 窗格的 [重新導向 URI ] 字段中。

如需簽署應用程式的詳細資訊,請參閱 在Android Studio使用者指南中簽署您的應用程式

設定 MSAL 以使用訊息代理程式

若要在應用程式中使用訊息代理程式,您必須證明您已設定訊息代理程式重新導向。 例如,請同時包含已啟用重新導向 URI 的訊息代理程式,並指出您已註冊它,方法是在 MSAL 組態檔中包含下列設定:

"redirect_uri" : "<yourbrokerredirecturi>",
"broker_redirect_uri_registered": true

MSAL 會以兩種方式與訊息代理程式通訊:

  • Broker 系結服務
  • Android AccountManager

MSAL 會先使用訊息代理程式系結服務,因為呼叫此服務不需要任何 Android 許可權。 如果系結至系結服務失敗,MSAL 會使用Android AccountManager API。 只有在您的應用程式已獲得 "READ_CONTACTS" 許可權時,MSAL 才會這麼做。

如果您收到錯誤碼"BROKER_BIND_FAILURE"MsalClientException 的 ,則有兩個選項:

  • 要求使用者停用 Microsoft Authenticator 應用程式和 Intune 公司入口網站 的電源優化。
  • 要求使用者授與 "READ_CONTACTS" 許可權

驗證訊息代理程式整合

目前可能還不清楚訊息代理程式整合是否正常運作,但您可以使用下列步驟來檢查:

  1. 在您的 Android 裝置上,使用訊息代理程式完成要求。
  2. 在Android裝置上的設定中,尋找與您驗證帳戶對應的新建立帳戶。 帳戶的類型應該是 Work 帳戶

如果您想要重複測試,您可以從設定中移除帳戶。

透過系統瀏覽器的 SSO

Android 應用程式可以選擇使用 WEBVIEW、系統瀏覽器或 Chrome 自定義索引標籤來進行驗證用戶體驗。 如果應用程式未使用代理驗證,則需要使用系統瀏覽器,而不是原生 Web 檢視,才能達成 SSO。

授權代理程式

選擇授權代理程式的特定策略很重要,而且代表其他功能應用程式可以自定義。 我們建議使用 『WEBVIEW』。 若要深入瞭解其他 Confguration 值(請參閱 瞭解 Android MSAL 組態檔

MSAL 支援使用 WEBVIEW或系統瀏覽器進行授權。 下圖顯示如何使用 WEBVIEW, 或系統瀏覽器搭配 CustomTabs 或不含 CustomTabs:

MSAL login examples

SSO 含意

如果應用程式使用 WEBVIEW 策略而不與代理驗證整合至其應用程式,則使用者不會在裝置上或原生應用程式和 Web 應用程式之間使用單一登錄體驗。

Appplication 可以與 MSAL 整合,以使用 BROWSER 來授權。 不同於 WEBVIEW,請與預設系統瀏覽器共用 Cookie jar, BROWSER 以使用 Web 或其他已與自定義索引標籤整合的原生應用程式啟用較少的登入。

如果應用程式搭配 Microsoft Authenticator 或 Intune 公司入口網站 之類的訊息代理程式使用 MSAL,則如果使用者具有其中一個應用程式的作用中登入,則使用者可以跨應用程式使用 SSO 體驗。

注意

MSAL 搭配訊息代理程式會利用 WebView,並為取用 MSAL 連結庫和參與代理驗證的所有應用程式提供單一登錄 (SSO)。來自訊息代理程式的 SSO 狀態不會延伸至其他不使用 MSAL 的應用程式。

WebView

若要使用應用程式內 WebView,請將下列程式代碼行放在傳遞至 MSAL 的應用程式組態 JSON 中:

"authorization_user_agent" : "WEBVIEW"

使用應用程式 WEBVIEW內時,使用者會直接登入應用程式。 令牌會保留在應用程式的沙箱內,且無法在應用程式的 Cookie jar 外部使用。 因此,除非應用程式與 Authenticator 或 公司入口網站 整合,否則使用者無法跨應用程式使用 SSO 體驗。

不過, WEBVIEW 提供自定義登入UI外觀與風格的功能。 如需如何執行此自定義的詳細資訊,請參閱 Android WebViews

瀏覽器

我們建議使用 WEBVIEW,不過我們提供使用瀏覽器和 自定義索引標籤 策略的選項。 您可以在自訂組態檔中使用下列 JSON 組態來明確指出此策略:

"authorization_user_agent" : "BROWSER"

使用此方法透過裝置的瀏覽器提供 SSO 體驗。 MSAL 使用共用 Cookie jar,允許其他原生應用程式或 Web 應用程式使用 MSAL 所設定的保存工作階段 Cookie,在裝置上達成 SSO。

瀏覽器選取啟發學習法

由於 MSAL 無法指定在 Android 手機廣泛數位中使用的確切瀏覽器套件,所以 MSAL 會實作瀏覽器選擇啟發學習法,嘗試提供最佳的跨裝置 SSO。

MSAL 主要會從套件管理員擷取預設瀏覽器,並檢查它是否位於安全瀏覽器的測試清單中。 如果沒有,MSAL 會回復使用 Webview,而不是從安全列表啟動另一個非預設瀏覽器。 不論它是否支援自定義索引標籤,都會選擇預設瀏覽器。 如果瀏覽器支援自定義索引標籤,MSAL 會啟動自定義索引標籤。自定義索引標籤的外觀和風格更接近應用程式 WebView 內,並允許基本的 UI 自定義。 若要深入瞭解,請參閱 Android 中的自定義索引標籤。

如果裝置上沒有瀏覽器套件,MSAL 會使用應用程式 WebView內 。 如果未變更裝置預設設定,則應該針對每個登入啟動相同的瀏覽器,以確保 SSO 體驗。

測試過的瀏覽器

下列瀏覽器已經過測試,以檢視它們是否正確地重新導向至 "redirect_uri" 組態檔中指定的 :

裝置 內建瀏覽器 Chrome Opera Microsoft Edge UC 瀏覽器 Firefox
Nexus 4 (API 17) 通過 通過 不適用 不適用 不適用 不適用
Samsung S7 (API 25) pass1 通過 通過 通過 失敗 通過
亞克文 (API 26) 通過 通過 通過 通過 通過 失敗
像素 2 (API 26) 通過 通過 通過 通過 失敗 通過
Oppo 通過 不適用2 不適用 不適用 不適用 不適用
OnePlus (API 25) 通過 通過 通過 通過 失敗 通過
Nexus (API 28) 通過 通過 通過 通過 失敗 通過
MI 通過 通過 通過 通過 失敗 通過

1三星的內建瀏覽器是 Samsung 因特網。
2無法在 Oppo 裝置設定內變更預設瀏覽器。

下一步

Android 裝置的共用裝置 模式可讓您設定 Android 裝置,讓多個員工輕鬆共用它。