使用 MSAL 在 Android 上啟用跨應用程式的 SSO
單一登入 (SSO) 可讓使用者只輸入其認證一次,並讓這些認證自動跨應用程式運作。它可藉由減少使用者管理所需的密碼數、降低密碼疲勞和相關聯的弱點風險,以增強使用者體驗並改善安全性。
Microsoft 身分識別平台和 Microsoft Authentication Library (MSAL) 可協助您在應用程式套件中啟用 SSO。 藉由啟用 Broker 功能,您可以在整個裝置擴充 SSO。
在本操作說明中,您會了解如何設定應用程式使用的 SDK 以提供 SSO 給客戶。
必要條件
此操作說明會假設您知道如何:
- 佈建您的應用程式。 如需詳細資訊,請參閱在 Android 教學課程中建立應用程式的指示
- 整合應用程式與 MSAL for Android
SSO 的方法
使用適用於 Android 的 MSAL 應用程式有兩種方式可達成 SSO:
透過系統瀏覽器
建議您使用訊息代理程式應用程式來獲得類似裝置範圍的 SSO、帳戶管理和條件式存取等優點。 不過,需要您的使用者下載其他應用程式。
透過代理驗證的 SSO
建議您使用其中一個 Microsoft 驗證訊息代理程式來參與全裝置 SSO,並符合組織的條件式存取原則。 與訊息代理程式整合可提供下列優點:
- 裝置 SSO
- 條件式存取:
- Intune 應用程式防護
- 裝置註冊 (Workplace Join)
- 行動裝置管理
- 全裝置帳戶管理
- 透過 Android AccountManager 與帳戶設定
- 「工作帳戶」- 自訂帳戶類型
在 Android 上,Microsoft 驗證訊息代理程式是包含在 Microsoft Authenticator 和 Intune 公司入口網站和連結至 Windows 應用程式中的元件。
下圖說明您的應用程式、MSAL 和 Microsoft 驗證代理程式之間的關聯性。
安裝裝載訊息代理程式的應用程式
裝載訊息代理程式的應用程式可以隨時由裝置擁有者從應用程式商店安裝 (通常是 Google Play 商店)。 不過,某些 Api (資源) 會受到條件是存取保護,要求裝置必須是下列條件:
- 已註冊 (workplace joined) 和/或
- 註冊裝置管理或
- 註冊在 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:
- 以至少 雲端應用程式系統管理員 的身分登入 Microsoft Entra 系統管理中心。
- 如果您可存取多個租用戶,請使用頂端功能表中的 [設定] 圖示 ,以從 [目錄 + 訂用帳戶] 功能表,切換至包含應用程式註冊之租用戶。
- 瀏覽至 [身分識別]>[應用程式]>[應用程式註冊]。
- 選取您的應用程式,然後選取 [驗證]>[新增平台]>[Android]。
- 在 [設定您的 Android 應用程式] 窗格中,輸入您稍早產生的簽章雜湊碼和套件名稱。
- 選取 [設定] 按鈕。
重新導向 URI 會為您產生,並顯示在 [Android 組態] 窗格的 [重新導向 URI] 欄位中。
如需有關簽署應用程式的詳細資訊,請參閱 Android Studio 使用者指南中的簽署應用程式。
將 MSAL 設定為使用訊息代理程式
若要在您的應用程式中使用訊息代理程式,您必須證明您已設定訊息代理程式重新導向。 例如,包含已啟用訊息代理程式的重新導向 URI,並指出您已註冊,透過在您的 MSAL 設定檔中包含下列設定:
"redirect_uri" : "<yourbrokerredirecturi>",
"broker_redirect_uri_registered": true
訊息代理程式相關的例外狀況
MSAL 與訊息代理程式通訊的方式有兩種:
- 訊息代理程式繫結服務
- Android AccountManager
MSAL 會先使用訊息代理程式繫結服務,因為呼叫此服務不需要任何 Android 許可權。 如果繫結至繫結的服務失敗,MSAL 將會使用 Android AccountManager API。 只有當您的應用程式已被授與"READ_CONTACTS"
許可權時,MSAL 才會這麼做。
如果您收到MsalClientException
與錯誤碼"BROKER_BIND_FAILURE"
,則有兩個選項:
- 要求使用者停用 Microsoft Authenticator 應用程式和 Intune 公司入口網站的電源優化。
- 要求使用者授與
"READ_CONTACTS"
許可權
確認訊息代理程式整合
可能不會立即清楚顯示訊息代理程式整合是否正常運作,但您可以使用下列步驟來檢查:
- 在您的 Android 裝置上,使用訊息代理程式完成要求。
- 在 Android 裝置的設定中,尋找與您用來驗證的帳戶相對應的新建立帳戶。 帳戶應該是工作帳戶類型。
如果您想要重複此測試,您可以從設定中移除帳戶。
透過系統瀏覽器的 SSO
Android 應用程式可以選擇使用 WEBVIEW
、[系統瀏覽器] 或 [Chrome 自訂索引標籤] 來進行驗證使用者體驗。 如果應用程式未使用代理驗證,則需要使用系統瀏覽器,而不是原生 Web 程式,才能達成 SSO。
授權代理程式
選擇授權代理程式的特定策略很重要,代表應用程式可以自訂的其他功能。 我們建議您使用 'WEBVIEW'。 若要深入了解其他組態值 (請參閱了解 Android MSAL 組態檔。
MSAL 支援使用WEBVIEW
或系統瀏覽器的授權。 下圖顯示其使用WEBVIEW
的方式,或使用 CustomTabs 或沒有 CustomTabs 的系統瀏覽器:
SSO 含意
如果應用程式使用 WEBVIEW
策略,而沒有將與代理驗證整合至其應用程式,使用者在裝置上或原生應用程式與網路應用程式之間將不會有單一登入體驗。
應用程式可以整合 MSAL 以使用 BROWSER
進行授權。 不同於 WebView,BROWSER
會與預設的系統瀏覽器共用 cookie jar,讓您可以使用網路或其他已與自訂索引標籤整合的原生應用程式來登入。
如果應用程式使用 MSAL 搭配訊息代理程式 (例如 Microsoft Authenticator、Intune 公司入口網站,或連結至 Windows),如果使用者使用其中一個應用程式進行中的登入,使用者可以在應用程式間擁有 SSO 體驗。
注意
MSAL 搭配代理程式會利用 WebView,並為取用 MSAL 連結庫和參與代理驗證的所有應用程式提供單一登入 (SSO)。來自代理程式的 SSO 狀態不會延伸至其他不使用 MSAL 的應用程式。
WebView
若要使用應用程式內的 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 裝置讓多個員工可以輕鬆共用。
如需訊息代理程式應用程式的詳細資訊,請移至下列頁面: