单一登录 (SSO) 允许用户仅输入一次凭据,并让这些凭据自动跨应用程序工作。 它通过减少用户需要管理的密码数、降低密码疲劳和关联漏洞的风险来提高用户体验并提高安全性。
Microsoft 标识平台和Microsoft 身份验证库(MSAL)可帮助你跨应用程序套件启用 SSO。 通过启用 Broker 功能,可以跨整个设备扩展 SSO。
本操作说明介绍如何配置应用程序用于为客户提供 SSO 的软件开发工具包(SDK)。
先决条件
本操作指南假定你知道如何:
- 配置您的应用。 有关详细信息,请参阅在 Android 教程中创建应用的说明
- 将应用程序与适用于 Android 的 MSAL 集成
SSO 方法
使用 MSAL for Android 实现 SSO 的应用程序有两种方法:
通过代理身份验证实现 SSO
建议使用Microsoft身份验证代理之一参与设备范围的 SSO 并满足组织条件访问策略。 与中转站集成具有以下优势:
- 设备 SSO
- 以下对象的条件访问:
- Intune 应用保护
- 设备注册(工作单位加入)
- 移动设备管理
- 全设备账户管理
- 通过 Android AccountManager 和帐户设置
- “工作帐户”- 自定义帐户类型
在 Android 上,Microsoft身份验证代理是包含在 Microsoft Authenticator、Intune 公司门户 和链接到Windows应用的组件。
下图说明了应用、MSAL 和Microsoft身份验证代理之间的关系。
安装托管代理的应用程序
设备所有者可以随时从其应用商店(通常是 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
窗户:
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 配置 窗格的 “重定向 URI ”字段中。
有关对应用进行签名的详细信息,请参阅 Android Studio 用户指南中的 应用签名 。
将 MSAL 配置为使用代理
要在应用中使用中介,必须证明你已配置中介重定向。 例如,通过在 MSAL 配置文件中包含以下设置,来包含中介启用的重定向 URI,并指示已注册该中介:
"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 设备上的设置中,查找与你通过身份验证的帐户对应的新创建的帐户。 该帐户应为 Work 帐户类型。
如果要重复测试,可以从设置中删除帐户。
通过系统浏览器进行 SSO
Android 应用程序可以选择使用 WEBVIEW、系统浏览器或 Chrome 自定义选项卡进行身份验证用户体验。 如果应用程序未使用代理身份验证,则需要使用系统浏览器而非原生 WebView,才能实现单点登录(SSO)。
授权代理
为授权代理选择特定策略非常重要,这也是应用可以自定义的一项额外功能。 建议使用“WEBVIEW”。 若要详细了解其他配置值(请参阅 了解 Android MSAL 配置文件。
MSAL 支持使用 WEBVIEW或系统浏览器进行授权。 下图展示了使用 WEBVIEW,或使用带有 CustomTabs 或不带 CustomTabs 的系统浏览器时的显示效果:
SSO 的影响
如果应用程序采用 WEBVIEW 策略,但未在其应用中集成代理身份验证,则用户将无法在整个设备上,或在本机应用与 Web 应用之间享受单点登录(SSO)体验。
应用程序可以与 MSAL 集成,以使用 BROWSER 进行授权。 与 WEBVIEW 不同,BROWSER 与默认系统浏览器共享同一 Cookie 存储,因此在使用网页应用或其他集成了自定义选项卡的原生应用时,可减少重复登录。
如果应用程序将 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 。
Browser
我们建议使用 WEBVIEW,不过我们提供了使用浏览器和 自定义选项卡 策略的选项。 您可以在自定义配置文件中使用以下 JSON 配置来明确指定这一策略:
"authorization_user_agent" : "BROWSER"
使用此方法通过设备的浏览器提供 SSO 体验。 MSAL 使用共享 Cookie 存储,这使其他原生应用或 Web 应用能够通过使用由 MSAL 设置并持久保存的会话 Cookie,在设备上实现单点登录(SSO)。
浏览器选择启发规则
由于 MSAL 无法指定在各种 Android 手机上使用的确切浏览器包,因此 MSAL 实现了浏览器选择启发式,试图提供最佳的跨设备 SSO。
MSAL 主要从包管理器检索默认浏览器,并检查它是否位于安全浏览器的测试列表中。 如果不在,MSAL 将退回到使用 Web 视图,而不是从安全列表启动其他非默认浏览器。 无论它是否支持自定义选项卡,都会选择默认浏览器。 如果浏览器支持自定义选项卡,MSAL 将启动自定义选项卡。自定义选项卡的外观和体验更接近应用内的 WebView,并允许进行基本的用户界面自定义。 有关详细信息 ,请参阅 Android 中的自定义选项卡 。
如果设备上没有浏览器包,MSAL 将使用应用中 WebView。 如果未更改设备默认设置,则应为每个登录启动相同的浏览器,以确保 SSO 体验。
测试的浏览器
已对以下浏览器进行了测试,以确认它们是否会正确重定向到配置文件中指定的 "redirect_uri":
| 设备 | 内置浏览器 | 铬 | 歌剧 | Microsoft Edge | UC 浏览器 | 火狐浏览器 |
|---|---|---|---|---|---|---|
| Nexus 4 (API 17) | 通过 | 通过 | 不適用 | 不適用 | 不適用 | 不適用 |
| Samsung S7 (API 25) | 通过1 | 通过 | 通过 | 通过 | 失败 | 通过 |
| Vivo(API 26) | 通过 | 通过 | 通过 | 通过 | 通过 | 失败 |
| 像素 2 (API 26) | 通过 | 通过 | 通过 | 通过 | 失败 | 通过 |
| Oppo | 通过 | 不适用2 | 不適用 | 不適用 | 不適用 | 不適用 |
| OnePlus (API 25) | 通过 | 通过 | 通过 | 通过 | 失败 | 通过 |
| Nexus (API 28) | 通过 | 通过 | 通过 | 通过 | 失败 | 通过 |
| MI | 通过 | 通过 | 通过 | 通过 | 失败 | 通过 |
1Samsung 的内置浏览器是 Samsung Internet。
2无法在 Oppo 设备设置内更改默认浏览器。
后续步骤
Android 设备的共享设备模式 允许你配置 Android 设备,以便多个员工可以轻松共享它。
有关中转站应用程序的详细信息,请参阅: