單一登入 (SSO) 允許用戶只輸入一次憑證,且憑證能自動在應用程式間運作。 它透過減少用戶需要管理的密碼數量,提升使用者體驗並提升安全性,降低密碼疲勞及相關漏洞的風險。
Microsoft 身分識別平台 與 Microsoft 驗證資源庫(MSAL)協助您在整個應用程式套件中啟用 SSO。 啟用 Broker 功能後,你可以將 SSO 擴展到整個裝置。
在這份教學中,你將學習如何配置應用程式所使用的軟體開發套件(SDK),以提供客戶單點登入(SSO)。
先決條件
這份教學假設你知道如何:
- 配置你的應用程式。 更多資訊請參閱 Android 教學中的應用程式製作說明
- 將您的應用程式與 Android 版 MSAL 整合
SSO 方法
使用 Android 版 MSAL 的應用程式有兩種方式可以實現單點登入(SSO):
透過代理式驗證實現單一登入
我們建議您使用 Microsoft 的認證代理,參與全裝置的 SSO 並符合組織的條件存取政策。 與經紀人整合可帶來以下好處:
- 裝置單一登入
- 條件存取適用於:
- Intune 應用程式防護
- 裝置註冊(職場加入)
- 行動裝置管理
- 裝置範圍的帳號管理
- 透過 Android 帳戶管理員與帳戶設定
- 「工作帳號」-自訂帳號類型
在 Android 上,Microsoft 認證代理是一個包含在 Microsoft Authenticator、Intune 公司入口網站 以及 Link to Windows 應用程式中的元件。
下圖說明了您的應用程式、MSAL 與 Microsoft 認證代理之間的關係。
安裝裝載代理程式的應用程式
經紀人託管應用程式可由裝置擁有者隨時從其應用商店(通常是 Google Play 商店)安裝。 然而,有些 API(資源)受條件存取政策保護,要求裝置必須具備:
- 已註冊(職場加入)和/或
- 註冊於 裝置管理 或
- 已加入 Intune 應用程式保護
如果符合上述需求的裝置尚未安裝經紀應用程式,MSAL 會指示使用者在應用程式嘗試互動式取得令牌時立即安裝。 應用程式會引導使用者完成步驟,使裝置符合所需政策。 如果沒有政策要求,或使用者是用 Microsoft 帳戶 登入,那麼就不需要安裝 Broker 應用程式。
安裝與卸載代理工具的影響
當代理程式安裝後
當代理者安裝於裝置上時,所有後續的互動令牌請求(呼叫 acquireToken())都由代理者處理,而非由 MSAL 本地處理。 任何先前可供 MSAL 使用的 SSO 狀態,代理程式都無法存取。 因此,使用者需要重新驗證,或從裝置已知的現有帳號清單中選擇一個帳號。
安裝代理程式時,使用者不需要重新登入。 只有當使用者需要解析一個 MsalUiRequiredException 時,下一個請求才會傳送到代理程式。
MsalUiRequiredException 可以因多種原因丟棄,且需要互動式解決。 例如:
- 使用者更改了與其帳號綁定的密碼。
- 使用者的帳號不再符合條件存取政策。
- 該用戶撤銷了應用程式與其帳戶綁定的同意。
多重代理商 - 若裝置安裝多個代理,MSAL 會自行識別該代理以完成認證程序
當代理程式被解除安裝時
如果只安裝了一個經紀人主機應用程式,且它被移除了,那使用者就需要重新登入。 卸載該有效經紀商會移除該帳戶及相關代幣。
如果 Microsoft Authenticator、Intune 公司入口網站 或 Link to 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
窗戶:
keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | openssl sha1 -binary | openssl base64
當你用 keytool 產生簽名雜湊後,使用 Azure 入口網站產生重定向 URI:
- 請至少以雲端應用程式管理員身份登入Microsoft Entra 管理中心。
- 如果您有多個租用戶的存取權,請使用頂端功能表中的 設定 圖示
,從 目錄 + 訂閱 功能表切換至包含應用程式註冊的租用戶。 - 流覽至 Entra ID>應用程式註冊。
- 選擇你的應用程式,然後選擇 「認證」「>新增平台>」Android。
- 在打開的 「配置你的 Android 應用程式 」面板中,輸入你之前產生的 簽名雜湊 值和 套件名稱。
- 選取 [設定] 按鈕。
重定向 URI 會自動產生,並顯示在 Android 設定 窗格的 Redirect URI 欄位中。
欲了解更多關於簽署應用程式的資訊,請參閱 Android Studio 使用者指南中的 「簽署您的應用程式 」。
設定 MSAL 以使用代理程式
若要在您的應用程式中使用代理程式,您必須證明您已設定代理程式重新導向 URI。 例如,請在 MSAL 設定檔中加入下列設定,同時包含已啟用 Broker 的重新導向 URI,並註明你已註冊該 URI:
"redirect_uri" : "<yourbrokerredirecturi>",
"broker_redirect_uri_registered": true
經紀人相關例外
MSAL 與經紀人以兩種方式溝通:
- 經紀人導向服務
- Android 帳戶管理員
MSAL 首先使用與代理程式繫結的服務,因為呼叫此服務不需要任何 Android 權限。 如果無法繫結至已繫結的服務,MSAL 會使用 Android AccountManager API。 MSAL 只有在您的應用程式已被授與 "READ_CONTACTS" 權限時,才會這麼做。
如果你遇到 MsalClientException 錯誤代碼 "BROKER_BIND_FAILURE",則有兩個選擇:
- 請使用者關閉 Microsoft Authenticator 應用程式和 Intune 公司入口網站 的電源優化。
- 要求使用者授予
"READ_CONTACTS"權限
驗證代理程式整合
經紀人整合是否有效可能不立即明確,但你可以依照以下步驟檢查:
- 在你的 Android 裝置上,透過經紀人完成請求。
- 在你的 Android 裝置設定中,尋找一個新建立的帳號,對應你曾用過的帳號。 帳戶應該是 工作帳戶類型。
如果你想重做測試,可以從設定中移除該帳號。
透過系統瀏覽器進行單點登入
Android 應用程式可選擇使用 WEBVIEW、系統瀏覽器或 Chrome 自訂分頁,作為驗證流程的使用者體驗。 如果應用程式未使用經紀式認證,就必須使用系統瀏覽器而非原生 WebView,才能實現單一登入(SSO)。
授權代理
為授權代理選擇特定策略很重要,這代表應用程式可以自訂的額外功能。 我們建議使用 『WEBVIEW』。 想了解更多其他設定值(請參見 「了解 Android MSAL 設定檔」。
MSAL 支援使用 WEBVIEW 或系統瀏覽器進行授權。 下方圖片顯示了使用 WEBVIEW,或使用系統瀏覽器搭配 Custom Tabs 或不搭配 Custom Tabs 時的顯示方式:
SSO 的影響
如果應用程式採用 WEBVIEW 策略,但未在應用程式中整合代理驗證,使用者將無法在整個裝置上,或在原生應用程式與 Web 應用程式之間獲得單一登入(SSO)體驗。
應用程式可與 MSAL 整合,以使用 BROWSER 進行授權。 與 WEBVIEW 不同,BROWSER 與預設系統瀏覽器共用 Cookie 儲存空間,因此在網頁或其他已整合自訂分頁功能的原生應用程式中可減少登入次數。
如果應用程式使用 MSAL 搭配像 Microsoft Authenticator、Intune 公司入口網站 或 Link to Windows 這類的仲介,那麼使用者只要在其中一個應用程式有主動登入,就能在多個應用程式間擁有 SSO 體驗。
Note
搭配 broker 的 MSAL 會使用 WebView,並為所有使用 MSAL 程式庫且參與 broker 驗證的應用程式提供單一登入(SSO)。來自 broker 的 SSO 狀態不會擴展到其他未使用 MSAL 的應用程式。
網頁檢視器 (WebView)
要使用應用程式內的 WebView,請在傳送給 MSAL 的應用程式設定 JSON 中輸入以下一行:
"authorization_user_agent" : "WEBVIEW"
使用應用程式內的 WEBVIEW 時,使用者會直接登入該應用程式。 代幣會被保存在應用程式的沙盒中,無法在應用程式的餅乾罐外取得。 因此,除非應用程式與 Microsoft Authenticator 應用程式、Intune 公司入口網站 或 Link to Windows 整合,否則使用者無法在應用程式間擁有 SSO 體驗。
不過,WEBVIEW 確實提供了自訂登入介面外觀與感受的功能。 有關如何進行這種客製化,請參閱 Android WebViews 。
瀏覽器
我們建議使用 WEBVIEW,但我們提供瀏覽器使用選項及 自訂分頁 策略。 你可以在自訂設定檔中使用以下 JSON 設定來明確標示此策略:
"authorization_user_agent" : "BROWSER"
利用此方法透過裝置瀏覽器提供單點登入體驗。 MSAL 使用共用 Cookie 儲存區,讓其他原生應用程式或 Web 應用程式可透過使用 MSAL 設定並保存的工作階段 Cookie,在裝置上實現單一登入(SSO)。
瀏覽器選擇啟發式
由於 MSAL 不可能針對各式各樣的 Android 手機明確指定每部裝置要使用哪個瀏覽器套件,因此 MSAL 實作了一種瀏覽器選擇啟發式方法,以盡可能提供最佳的跨裝置單一登入體驗(SSO)。
MSAL 主要從套件管理器取得預設瀏覽器,並檢查是否在經過測試的安全瀏覽器清單中。 否則,MSAL 會改為使用 WebView,而不是啟動安全清單中的另一個非預設瀏覽器。 預設瀏覽器會被選擇,不論是否支援自訂分頁。 如果瀏覽器支援自訂分頁,MSAL 會啟動自訂分頁。自訂分頁的外觀和感覺更接近應用程式 WebView 內,並且允許基本的使用者介面自訂。 想了解更多,請參閱 Android 中的自訂分頁 。
如果裝置上沒有瀏覽器套件,MSAL 會使用應用程式 WebView內的套件。 如果裝置預設設定沒有被更改,每次登入都應該啟動同一個瀏覽器,以確保 SSO 的體驗。
測試過的瀏覽器
以下瀏覽器已測試是否正確導向設定檔中指定的內容 "redirect_uri" :
| 裝置 | 內建瀏覽器 | 鉻 | 歌劇 | Microsoft Edge | UC 瀏覽器 | 火狐瀏覽器 |
|---|---|---|---|---|---|---|
| Nexus 4 (API 17) | 通過 | 通過 | 不適用 | 不適用 | 不適用 | 不適用 |
| 三星 S7(API 25) | 第1次 | 通過 | 通過 | 通過 | 失敗 | 通過 |
| Vivo(API 26) | 通過 | 通過 | 通過 | 通過 | 通過 | 失敗 |
| Pixel 2(API 26) | 通過 | 通過 | 通過 | 通過 | 失敗 | 通過 |
| OPPO | 通過 | 不適用2 | 不適用 | 不適用 | 不適用 | 不適用 |
| OnePlus(API 25) | 通過 | 通過 | 通過 | 通過 | 失敗 | 通過 |
| Nexus (API 28) | 通過 | 通過 | 通過 | 通過 | 失敗 | 通過 |
| MI | 通過 | 通過 | 通過 | 通過 | 失敗 | 通過 |
1三星內建的瀏覽器是 Samsung Internet。
2預設瀏覽器無法在 Oppo 裝置設定中更改。
下一步
Android 裝置的共享裝置模式允許你設定一個 Android 裝置,讓多位員工都能輕鬆共享。
欲了解更多經紀人申請資訊,請參閱: