面向独立软件开发人员的 Microsoft Entra ID 指南
Microsoft Entra ID 是基于云的标识和访问管理服务,它让员工能够访问资源。 行业分析师一直视 Microsoft Entra ID 为领导者。 它曾七次当选 Gartner 访问管理魔力象限的领导者。 KuppingerCole 对 Microsoft Entra ID 在访问管理的所有维度的评价都是积极的。 Frost & Sullivan 将 Microsoft 评为 2022 全球标识和访问管理行业年度公司。 阅读有关使用 Microsoft Entra ID 的 30 多万个组织的一些案例。
本文是关于独立软件开发人员 (ISV) 如何为 Microsoft Entra ID 构建和优化应用程序的系列中的第一篇文章。 在此系列中,你可以了解有关以下主题的详细信息:
- 在 Microsoft Entra ID 生态系统中建立应用程序介绍了如何使用 Microsoft Entra 管理中心或 Microsoft Graph 应用程序编程接口 (API) 在 Microsoft Entra ID 租户中注册应用。
- 身份验证应用程序和用户介绍了应用程序如何使用 Microsoft Entra ID 对用户和应用程序进行身份验证。
- 授权应用程序、资源和工作负荷演示了当人类与应用程序交互并引导应用程序时的授权过程。 在此方案中,API 代表用户行动,而应用程序或服务则独立工作。
- 自定义令牌可帮助你使用 Microsoft Entra ID 的 ID 令牌和访问令牌将安全性构建到应用程序中。 它介绍了可以在 Microsoft Entra ID 令牌中接收的信息,以及如何自定义它们。
使用 Microsoft 标识平台进行开发
应用程序是 Microsoft Entra ID 的核心。 当用户访问资源时,他们使用应用程序访问资源。 Microsoft 标识平台包含让开发人员能够基于 Microsoft Entra ID 进行构建的工具和服务。 Microsoft 标识平台从 Microsoft Entra ID 开始,这项云服务提供应用程序所需的登录、注销和应用程序注册等操作。 Microsoft 标识平台整合了使用各种语言和框架的开源 Microsoft 身份验证库 (MSAL) 以及提供用于访问 Microsoft Entra ID 中的数据和操作的 API 的 Microsoft Graph。
对于开发人员,Microsoft 标识平台包含以下功能。
- 对用户进行身份验证、授权应用、生成 API 令牌。
- 通过 Microsoft 身份验证库 (MSAL) 直接简化安全功能集成,或使用 Microsoft.Identity.Web 或 Azure.Identity 等更高级别的 API。
- 无需从头开始实现 OAuth 2.0,只需使用 MSCL 抽象出复杂性,利用消除开发人员繁琐工作的可靠 API。
- 确保应用程序遵循符合行业标准和协议(如 OAuth 2.0)的最佳做法。
- 通过单一登录 (SSO) 支持跨应用程序和体验统一身份验证情景。
- 使用 Microsoft 外部 ID 简化社交标识集成。
- 使用最少的管道代码和对 Microsoft Entra ID 功能的本机支持来保护数据和Assets,例如条件访问 (CA) and 设备管理。
- 构建可安全保护身份验证令牌并同时确保设备和策略符合性强制实施的应用程序。 依赖对于使用新式代理(如 Microsoft Authenticator 或 Windows 上的 Web 帐户管理器 (WAM) 等内置操作系统组件)进行身份验证的支持。
将应用程序与 Microsoft Entra ID 集成
与 Microsoft Entra ID 用户、服务或组标识集成的应用程序与 Microsoft Entra ID 租户交互。 租户是 Microsoft Entra ID 的专用实例,通常表示大型公司内的组织或组。 租户保存组织的目录、存储工作或学校帐户或受邀合作伙伴帐户等对象。 组、应用程序、设备和其他对象也会被存储。 租户提供应用程序用来执行操作(如身份验证)的 Web 终结点。
应用程序向租户终结点发出请求,以获取标识用户或资源 API 可用于授权资源访问的令牌。 Microsoft Entra ID 中的应用程序标识允许应用程序从 Microsoft Entra ID 租户请求令牌,同时为用户提供有关谁在尝试对它们进行身份验证的正确上下文级别。
虽然大多数企业只需要一个 Microsoft Entra ID 租户,但有些方案可能要求组织有多个租户来满足其业务目标。 大型企业可能包括多个独立业务部门,它们可能需要在整个企业中进行协调和协作。 某个地区的城市或某个区域的学校可能具有类似的要求。 在这些方案中,每个单元都可以有自己的租户及其自己的配置和策略。 由于 Microsoft Entra ID 云托管租户,因此组织可以通过最少的摩擦设置跨租户协作。
Microsoft Entra ID 在各种协议中支持以下各项。
- OAuth 2.0 是授权的行业标准。 应用程序使用 OAuth 2.0 协议请求访问令牌,为应用程序获取访问受保护的资源的授权。
- OpenID Connect (OIDC) 是基于 OAuth 2.0 构建的可互操作身份验证标准。 应用程序使用 OIDC 协议请求 ID 令牌,以对当前用户进行身份验证。
应用程序使用 Microsoft Entra ID 执行的核心操作是请求和处理令牌。 过去,让用户使用用户名和密码来识别自己通常足以让标识提供者(如 Microsoft Entra ID)向应用颁发令牌。 此令牌回答了以下问题:“用户是谁,该应用可以访问什么?”现在,验证标识帐户以获取更多信号的更安全方法是:
- 该用户是谁?
- 应用可以访问什么?
- 从什么设备?
- 使用的凭据的强度如何?
- 从哪些网络位置?
Microsoft Entra ID 客户可以使用条件访问等功能来确定他们想要评估哪些问题或条件,以确保安全的资源访问。
构建需要用户标识处理的应用程序的开发人员无需编写代码来应对这种颁发令牌的复杂性。 内置 MSAL 功能支持身份验证请求处理。 启用条件访问后,当应用程序请求令牌时,Microsoft Entra ID 可确保策略强制实施。 它会针对用户位置(例如,他们是否驻留在公司网络内)等策略来验证请求,或评估用户的风险信号。 用户风险评估可能需要更多用户交互,例如多重身份验证 (MFA)。 Microsoft Entra ID 验证了与策略约束的符合性后,会颁发令牌。 当它无法验证符合性时,Microsoft Entra ID 不会向应用颁发令牌,并会为用户提供上下文,说明他们为何无法访问资源。
由于条件访问策略现在更为复杂。 有一组广泛的信号,用于确定用户或服务是否应接收令牌。 例如,可能需要确定移动设备是否使用移动应用管理 (MAM),Intune 是否从桌面应用中管理 Windows 电脑。 或者,可能需要通过将令牌绑定到请求的发起设备来保护令牌。 这项工作有助于确保符合性和安全性,同时尽量减少开发人员的摩擦。 Microsoft 库提供了必要的基架,同时保持了响应特定策略要求的灵活性。
通过 Microsoft Entra ID 进行身份验证和授权
Microsoft Entra ID 支持浏览器内的身份验证和授权流,以保护基于 Web 的资产(如网站和 API),并且支持 Windows、macOS、Linux、iOS 和 Android 等客户端平台。 生态系统中的技术提供商与 Microsoft 合作,以确保客户、其组织和合作伙伴具有无缝的凭据处理体验。 Microsoft Edge 可直接与 Microsoft Entra ID 配合使用,以支持设备范围的 SSO,从而在用户的 Windows 设备上对他们进行身份验证。 Google Chrome(版本 111)和 Firefox(版本 91) 具有此功能。 使用 Microsoft Entra ID 标识的 Web 应用程序会在其基于浏览器的应用中自动使用这些功能为客户提供无缝登录体验。
为了使本机应用程序能够提供这种统一的 SSO 体验,Microsoft Entra 引入了身份验证代理,它是在用户设备上运行的应用程序,用于管理身份验证握手和维护连接的帐户的令牌。 下表列出了常见操作系统的身份验证代理。
操作系统 | 身份验证代理 |
---|---|
iOS | Microsoft Authenticator 应用 |
Android | Microsoft Authenticator 应用或 Intune 公司门户应用 |
Windows | Windows 10、Windows Server 2019 及更高版本、Windows 11 中提供的 Web 帐户管理器内置操作系统组件 |
借助身份验证代理,本机应用程序开发人员可以使用新的 Microsoft Entra ID 功能,例如基于设备的条件访问策略,而无需重写代码,因为新功能在云中可用。 不使用身份验证代理的应用程序可能会看到需要这些功能的 Microsoft Entra ID 客户对应用的采用有限。
将标识和访问管理委托给 Microsoft Entra ID
你可以使用任何实现 OAuth 2.0、OIDC 或 SAML 的开发人员工具、库或框架构建将标识和访问管理委托给 Microsoft Entra ID 的应用程序,并注意前面讨论的注意事项。 对于一个或多个认证配置文件(包括身份验证配置文件),许多具有 OpenID 认证的 OIDC 实现只需极少的额外配置即可用于 Microsoft Entra ID。 为了简化 Microsoft Entra ID 平台的开发,多个经过优化的 Microsoft 库可与 Microsoft 服务和功能配合使用。
- 当你构建 Web 应用、API 或其他工作负荷(例如 ASP.NET Core 或 ASP.NET 上的守护程序或服务)时,请使用 Microsoft 标识 Web。
- 如果在 Azure 上构建,请使用 Azure SDK,其中包括 Azure 标识客户端库。
- 如果无法使用其中某个库,请将 MSAL 用于开发环境,如下表所示。
库 | 支持的平台和框架 |
---|---|
适用于 Android 的 MSAL | Android |
MSAL Angular | 采用 Angular 和 Angular.js 框架的单页应用 |
MSAL Objective-C | iOS、iPadOS、macOS |
MSAL Go | Windows、macOS、Linux |
MSAL Java | Windows、macOS、Linux |
MSAL.js | JavaScript/TypeScript 框架,例如 Vue.js、Ember.js 或 Durandal.js |
MSAL.NET | .NET、.NET Framework、Xamarin Android、Xamarin iOS |
MSAL Node | Express 的 Web 应用、Electron 的桌面应用、跨平台控制台应用 |
MSAL Python | Windows、macOS、Linux |
MSAL React | 采用 React 和基于 React 的库(Next.js、Gatsby.js)的单页应用 |
MSAL 系列库提供了核心令牌获取和缓存功能。 基于 MSAL、Microsoft 标识 Web 和 Azure 标识客户端构建,使用身份验证库功能简化令牌获取。
如果可能,我们建议 ISV 基于 MSAL 构建,或使用基于 MSAL 构建的库。 MSAL 支持中介身份验证、条件访问方案、令牌保护,Microsoft Intune 应用保护策略与移动应用程序管理,等等。
在所有可用平台中,统一的 MSAL 身份验证框架与 Microsoft 标识平台无缝集成,实现一致且安全的用户身份验证。 由于 MSAL 会抽象出主动令牌续订、缓存和吊销的复杂性,开发人员可以确保身份验证流安全、稳定且可靠。
访问其他资源
应用程序通常需要的不止是身份验证和授权(例如访问租户的目录数据的权限)。 访问可能包括获取用户、组、组成员、应用程序和治理的属性。
Microsoft Graph 提供对租户的标识和访问权限、用户、组和应用程序的访问权限。 Microsoft Graph 是 Microsoft 365 中数据和智能的网关。 你可以使用它统一的可编程性模型,访问 Microsoft 365、Windows 和企业移动性 + 安全性 (EMS) 中的大量数据。
后续步骤
- 在 Microsoft Entra ID 生态系统中建立应用程序介绍了如何使用 Microsoft Entra 管理中心或 Microsoft Graph API 在 Microsoft Entra ID 租户中注册应用。
- 身份验证应用程序和用户介绍了应用程序如何使用 Microsoft Entra ID 对用户和应用程序进行身份验证。
- 授权应用程序、资源和工作负荷讨论了当个人与应用程序进行交互和指示应用程序时、API 为用户执行操作时以及应用程序或服务独立工作时的授权。
- 自定义令牌帮助你使用 Microsoft Entra ID 中的 ID 令牌和访问令牌将安全性构建到应用程序中。 其中介绍了可以在 Microsoft Entra ID 令牌中接收的信息,以及如何自定义这些令牌。