Microsoft Entra ID是基于云的标识和访问管理服务,使员工能够访问资源。 行业分析师一贯认识到Microsoft Entra ID为领导者。 它曾七次当选 Gartner 访问管理魔力象限的领导者。 KuppingerCole 在访问管理的所有维度上对 Microsoft Entra ID 给予了正面评价。 弗罗斯特和沙利文将微软评为2022年全球身份与访问管理行业的年度公司。 阅读关于使用 Microsoft Entra ID 的 30 多万个组织中的一些组织的故事。
本文是独立软件开发人员(ISV)如何为Microsoft Entra ID生成和优化应用程序的系列文章中的第一篇。 在此系列中,你可以了解有关以下主题的详细信息:
- 在Microsoft Entra ID生态系统中,建立应用程序描述了如何使用Microsoft Entra 管理中心或Microsoft Graph应用程序编程接口(API)来在Microsoft Entra ID租户中注册应用程序。
- 应用程序和用户身份验证介绍了应用程序如何使用 Microsoft Entra ID 对用户和应用程序进行身份验证。
- 授权应用程序、资源和工作负荷演示了当人类与应用程序交互并引导应用程序时的授权过程。 在此方案中,API 代表用户行动,而应用程序或服务则独立工作。
- 自定义令牌可帮助你使用 ID 令牌和访问令牌从 Microsoft Entra 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 Authentication Library(MSAL),或者通过更高级别的 API,例如 Microsoft.Identity.Web 或 Azure.Identity。
- 无需从头开始实现 OAuth 2.0,只需使用 MSAL,通过简化复杂性的可靠 API 来减少开发者的工作负担。
- 确保软件应用遵循行业标准和协议(如 OAuth 2.0)的安全最佳实践。
- 通过单一登录 (SSO) 支持跨应用程序和体验统一身份验证情景。
- 使用 Microsoft 外部 ID 简化社交标识集成。
- 通过简化代码和对 Microsoft Entra ID 功能的原生支持,如条件访问 (CA)、持续访问评估 (CAE)以及设备管理,来保护数据和资产的安全。
- 构建可安全保护身份验证令牌并同时确保设备和策略符合性强制实施的应用程序。 依赖于通过现代身份验证代理(例如 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 令牌,以对当前用户进行身份验证。
- 安全断言标记语言 (SAML) 2.0 是身份验证标准。 应用程序从Microsoft Entra ID请求 SAML 断言(也称为 SAML 令牌),以在应用与Microsoft Entra ID之间交换身份验证和授权数据。 应用程序使用 SAML 对当前用户进行身份验证。
应用程序在Microsoft Entra ID上执行的核心操作是请求和处理令牌。 过去,让用户使用用户名和密码来标识自己通常足以让标识提供者(如Microsoft Entra ID)向应用颁发令牌。 此令牌回答了以下问题:“用户是谁,该应用可以访问什么?”现在,验证标识帐户以获取更多信号的更安全方法是:
- 该用户是谁?
- 应用可以访问什么?
- 从什么设备?
- 使用的凭据的强度如何?
- 从哪些网络位置?
Microsoft Entra ID客户可以使用 Conditional Access 等功能来确定要评估哪些问题或条件以确保资源访问安全。
构建需要用户标识处理的应用程序的开发人员无需编写代码来应对这种颁发令牌的复杂性。 内置 MSAL 功能支持身份验证请求处理。 启用条件访问后,当应用程序请求令牌时,Microsoft Entra ID可确保策略强制实施。 它会针对用户位置(例如,他们是否驻留在公司网络内)等策略来验证请求,或评估用户的风险信号。 用户风险评估可能需要更多用户交互,例如多重身份验证 (MFA)。 Microsoft Entra ID验证策略约束的符合性后,会颁发令牌。 当它无法验证符合性时,Microsoft Entra ID不会向应用颁发令牌,并为用户提供上下文,说明他们无法访问资源的原因。
由于条件访问策略现在更为复杂。 有一组广泛的信号,用于确定用户或服务是否应接收令牌。 例如,可能需要确定移动设备是否使用 Mobile 应用程序管理(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 Company Portal 应用 |
| Windows | Web 帐户管理器 内置操作系统组件在 Windows 10、Windows Server 2019 及更高版本,以及 Windows 11 中提供。 |
借助身份验证代理,本机应用程序开发人员可以使用新的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服务和功能配合使用。
- 在 ASP.NET Core 或 ASP.NET 上生成 Web 应用、API 或其他工作负荷(例如守护程序或服务)时,请使用 Microsoft 标识 Web。
- 如果基于Azure生成,请使用包含Azure标识客户端库的 Azure SDKs。
- 如果无法使用其中某个库,请将 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、适用于Android的.NET、适用于tvOS的.NET |
| MSAL 节点 | Express 的 Web 应用、Electron 的桌面应用、跨平台控制台应用 |
| MSAL Python | Windows、macOS、Linux |
| MSAL React | 采用 React 和基于 React 的库(Next.js、Gatsby.js)的单页应用 |
MSAL 系列库提供了核心令牌获取和缓存功能。 利用 MSAL、Microsoft Identity Web 以及 Azure Identity 客户端的身份验证库功能,简化令牌获取过程。
如果可能,我们建议 ISV 基于 MSAL 构建,或使用基于 MSAL 构建的库。 MSAL 支持中转身份验证、条件访问方案、令牌保护、Microsoft Intune应用保护策略和 Mobile App Management、Microsoft持续访问评估等。
在所有可用平台中,统一的 MSAL 身份验证框架与 Microsoft 标识平台无缝集成,实现一致且安全的用户身份验证。 由于 MSAL 会抽象出主动令牌续订、缓存和吊销的复杂性,开发人员可以确保身份验证流安全、稳定且可靠。
访问其他资源
应用程序通常需要的不止是身份验证和授权(例如访问租户的目录数据的权限)。 访问可能包括获取用户、组、组成员、应用程序和治理的属性。
Microsoft Graph提供对租户的身份和访问的访问权限,用户、组和应用。 Microsoft Graph是Microsoft 365中数据和信息的入口。 可以使用其统一的可编程性模型访问Microsoft 365、Windows和Enterprise Mobility + Security(EMS)中的大量数据。
后续步骤
- Microsoft Entra ID生态系统中的Establish 应用程序介绍了如何使用 Microsoft Entra 管理中心或Microsoft Graph API在Microsoft Entra ID租户中注册应用。
- 应用程序和用户身份验证介绍了应用程序如何使用 Microsoft Entra ID 对用户和应用程序进行身份验证。
- 授权应用程序、资源和工作负载讨论当个人与应用程序交互并指导应用程序时、API 代表用户运行时以及应用程序或服务独立运行时的授权。
- 自定义令牌可帮助你使用 ID 令牌和访问令牌从 Microsoft Entra ID 在应用程序中构建安全性。 其中介绍了可以在Microsoft Entra ID令牌中接收的信息,以及如何对其进行自定义。