共用方式為


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

單一登入 (SSO) 可讓使用者只輸入其認證一次,並讓這些認證自動跨應用程式運作。它可藉由減少使用者管理所需的密碼數、降低密碼疲勞和相關聯的弱點風險,以增強使用者體驗並改善安全性。

Microsoft 身分識別平台和 Microsoft Authentication Library (MSAL) 可協助您在應用程式套件中啟用 SSO。 藉由啟用 Broker 功能,您可以在整個裝置擴充 SSO。

在本操作說明中,您會了解如何設定應用程式使用的 SDK 以提供 SSO 給客戶。

必要條件

此操作說明會假設您知道如何:

用於 SSO 的方法

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

  • 透過經紀人應用程式

  • 透過系統瀏覽器

    建議您使用經紀應用程式,以獲得全裝置的 SSO、帳戶管理和條件式存取等優勢。 不過,需要您的使用者下載其他應用程式。

透過代理驗證的 SSO

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

  • 裝置 SSO
  • 條件式存取:
    • Intune 應用程式防護
    • 裝置註冊 (Workplace Join)
    • 行動裝置管理
  • 全裝置帳戶管理
    • 透過 Android 帳戶管理器及帳戶設定
    • 「工作帳戶」- 自訂帳戶類型

在 Android 上,Microsoft 驗證訊息代理程式是包含在 Microsoft AuthenticatorIntune 公司入口網站連結至 Windows 應用程式中的元件。

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

圖表顯示應用程式與 MSAL、Broker 應用程式和 Android 帳戶管理員的關聯性。

安裝包含中介程式的應用程式

作為訊息代理伺服的應用程式可以由裝置擁有者隨時從其應用程式商店安裝 (通常是 Google Play 商店)。 不過,某些 API(資源)會受到條件式存取原則的保護,要求裝置必須符合:

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

如果符合上述需求的裝置尚未安裝代理應用程式,MSAL 會指示使用者一旦應用程式嘗試以互動方式取得權杖,立即進行安裝。 然後應用程式會引導使用者完成步驟,使裝置符合所需的原則。 如果沒有原則需求,或使用者使用 Microsoft 帳戶登入,則不需要 Broker 應用程式安裝。

安裝和卸載仲介的效果

代理被安裝時

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

安裝訊息代理程式不需要使用者再次登入。 只有當使用者需要解決MsalUiRequiredException時,下一個要求才會移至代理程式。 MsalUiRequiredException可能會因為許多原因而被拋出,且需要互動地加以解決。 例如:

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

多個訊息代理程式 - 如果裝置上安裝多個訊息代理程式,MSAL 會自行識別作用中訊息代理程式以完成驗證程式

當代理程式被卸載時

如果僅安裝了一個中介應用程式,並且已將其刪除,則使用者需要重新登入。 卸載作用中的代理程式會從裝置刪除帳戶及相關的權杖。

如果移除安裝 Microsoft Authenticator、Intune 公司入口網站或連結至 Windows,系統可能會要求使用者再次登入。

與代理商整合

產生中介的重新導向 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. 以至少 雲端應用程式系統管理員 的身分登入 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 與訊息代理程式通訊的方式有兩種:

  • 中介綁定服務
  • Android 帳戶管理器

MSAL 會先使用代理程式綁定服務,因為呼叫此服務不需要任何 Android 權限。 如果綁定至受限服務失敗,MSAL 將會使用 Android AccountManager API。 只有當您的應用程式已被授與"READ_CONTACTS"許可權時,MSAL 才會這麼做。

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

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

確認中介整合

一開始可能不容易看出代理整合是否正常運作,但您可以使用以下步驟來檢查:

  1. 在您的 Android 裝置上,使用代理程式完成請求。
  2. 在您的 Android 裝置設定中,尋找一個新建立的帳戶,該帳戶與您用來驗證的帳戶相對應。 帳戶應該是工作帳戶類型。

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

透過系統瀏覽器進行SSO

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

授權代理程式

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

MSAL 支援使用WEBVIEW作為授權方式或使用系統瀏覽器。 下方圖片顯示了使用WEBVIEW或系統瀏覽器(有 CustomTabs 或無 CustomTabs)時的外觀:

MSAL 登入範例

SSO 含意

如果應用程式使用 WEBVIEW 策略,而沒有將與代理驗證整合至其應用程式,使用者在裝置上或原生應用程式與網路應用程式之間將不會有單一登入體驗。

應用程式可以整合 MSAL 以使用 BROWSER 進行授權。 不同於 WebView,BROWSER 會與預設的系統瀏覽器共用 cookie jar,減少您使用網頁或其他與自訂標籤頁整合的原生應用程式時的登入次數。

如果應用程式使用 MSAL 並配合使用代理程式(如 Microsoft Authenticator、Intune 公司入口網站或連結至 Windows),那麼使用者如果已在其中一個應用程式中登入,可以在不同應用程式間享受單一登入(SSO)的體驗。

注意

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

WebView

若要使用應用程式內的網頁檢視,請將以下代碼放入傳遞給 MSAL 的應用程式設定 JSON 中:

"authorization_user_agent" : "WEBVIEW"

使用應用程式內的WEBVIEW時,使用者會直接登入應用程式。 權杖會保留在應用程式的沙箱內,而且無法在應用程式的 cookie jar 之外使用。 因此,除非應用程式與 Microsoft Authenticator、Intune 公司入口網站,或連結至 Windows 整合,否則使用者不會在應用程式間擁有 SSO 體驗。

不過,WEBVIEW確實提供了自訂登入 UI 外觀和風格的功能。 如需如何進行這項自訂的詳細資訊,請參閱 Android WebViews

瀏覽器

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

"authorization_user_agent" : "BROWSER"

使用此方法透過裝置瀏覽器提供 SSO 體驗。 MSAL 使用共用的 cookie jar,可讓其他原生應用程式或網路應用程式在裝置上使用 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) 傳遞1 通過 通過 通過 失敗 通過
Vivo (API 26) 通過 通過 通過 通過 通過 失敗
Pixel 2 (API 26) 通過 通過 通過 通過 失敗 通過
OPPO 通過 不適用2 不適用 不適用 不適用 不適用
OnePlus (API 25) 通過 通過 通過 通過 失敗 通過
Nexus (API 28) 通過 通過 通過 通過 失敗 通過
MI 通過 通過 通過 通過 失敗 通過

1Samsung 的內建瀏覽器是 Samsung Internet。
2無法變更 Oppo 裝置設定內的預設瀏覽器。

下一步

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

如需更多有關代理應用程式的資訊,請前往以下頁面: