Microsoft Entra 应用开发

已完成

现在,你已经对 Microsoft Entra ID 的基本原理和优势有了更多的了解,需要确定如何使用其功能为应用程序实现身份验证和授权。 你意识到,为了帮助保护客户数据,你需要确保你的实现将与 PostgreSQL 访问控制机制集成。 你决定首先确定开发、预配和管理 Microsoft Entra 应用程序所涉及的任务。 你还想确定如何满足向多个客户提供应用程序访问权限的需求。

要实现基于 Microsoft Entra ID 的应用程序,你将需要执行多项与应用程序相关的管理任务,包括注册、配置权限和管理机密。

什么是应用程序注册?

在 Microsoft Entra 环境中操作时,用户将分两个阶段向应用程序验证身份:

  1. 首先,Microsoft Entra ID 会验证用户的标识。 身份验证成功后,Microsoft Entra ID 会颁发令牌,其中包含反映身份验证成功的信息。
  2. 用户将令牌传递给应用程序。 应用程序验证用户的安全令牌,确保身份验证已成功。

要执行此类验证,应用程序必须能够与 Microsoft Entra ID 安全通信。 这反过来要求应用程序本身作为 Microsoft Entra 安全主体运行。 为此,必须确保在包含进行身份验证的用户帐户的同一 Microsoft Entra 租户中以某种形式表示应用程序。

Microsoft Entra ID 中的应用程序有两种表示形式:

  • 应用程序对象,用于定义应用程序的属性。
  • 服务主体,用于提供身份验证和授权功能并引用应用程序对象。

你可以从 Azure 门户的“应用注册”边栏选项卡中直接创建应用程序对象。 对于你自己的自定义应用程序,此类注册会自动创建相应的服务主体。 之后,你可以从 Azure 门户的“企业应用程序”边栏选项卡中管理服务主体。

在应用程序注册期间,可以选择指定应用程序的重定向统一资源标识符 (URI)。 其值指定了向应用成功授权后,授权服务器将用户重定向到的位置。 授权服务器会将代码或令牌发送到重定向 URI,因此在应用注册过程中注册正确的位置非常重要。

备注

重定向 URI 必须以 https 开头,除非它引用 localhost,在这种情况下,你可以使用 http://localhost。 它还区分大小写。

什么是应用程序权限?

与 Microsoft Entra ID 集成的应用程序遵循授权模型,支持你以精细的方式控制其对其他已集成 Microsoft Entra 的应用程序和资源的权限。 Microsoft Entra ID 依赖于 OAuth 2.0 授权模型来实现这些权限。 在 OAuth 2.0 中,权限被整理成集合,通常称为范围。

作为开发人员,你可以通过指定权限字符串作为应用程序配置的一部分,来请求应用程序所需的权限。 例如,将权限字符串设置为“https://graph.microsoft.com/Calendars.Read"”,表示应用程序需要能够读取 Microsoft Graph 中的用户日历。 应用程序必须通过同意获得这些权限,该同意必须由 Microsoft Entra 用户或 Microsoft Entra 管理员授予,具体取决于这些权限的范围。

Microsoft Entra ID 支持两种类型的权限:

  • 委托的权限由具有登录用户的交互式应用使用。 因此,应用在访问目标资源时代表登录用户执行操作。
  • 应用程序权限由不依赖登录用户运行的应用使用,例如后台服务。 这些应用需要管理许可。

什么是应用程序机密?

有两种类型的身份验证可用于服务主体:

  • 基于密码的身份验证,依赖于可以直接在 Azure 门户中生成的应用程序机密。 生成机密时,请指定其生存期。
  • 基于证书的身份验证,这依赖于上传到 Microsoft Entra ID 的证书。

注意

如果应用程序将由 Azure 计算资源(例如 Azure 虚拟机 (VM)、Azure 应用服务 Web 应用或 AKS 群集)托管,而不是使用服务主体,请考虑使用托管标识作为应用程序标识。 这样就无需管理用于身份验证的密码或证书。

有哪些不同类型的应用程序身份验证方案?

身份验证流和相应的配置详细信息取决于应用程序类型。 应用程序类型的常见类别包括:

  • 基于浏览器的应用。 它们是一些 Web 应用,其中的令牌是通过浏览器中运行的 JavaScript 或 TypeScript 应用获取的。 这些应用程序通常使用 Angular、React 或 Vue 等框架。 MSAL.js 是唯一支持 SPA 的 Microsoft 身份验证库。
  • 公共客户端应用程序。 这些应用始终依赖登录用户来获取令牌。 此类应用包括代表登录用户调用 Web API 的桌面应用和移动应用。
  • 机密客户端应用程序。 它们自行获取令牌。 此类别中的应用包括调用 Web API 的 Web 应用、调用另一个 Web API 的 Web API、Linux 守护程序和 Windows 服务。

上面的前两项对用户进行身份验证,而第三项仅对用户和后端服务之间的应用或服务进行身份验证。 在这种情况下,后端服务不会知道有关最终用户的任何信息,但会知道哪个应用正在使用它。 例如,将使用 Azure Maps 的应用视为后端服务。 Maps 服务需要知道授权应用程序正在调用它以进行正确的计费,但它不需要知道有关最终用户的任何信息。

单租户和多租户 Microsoft Entra 应用程序有什么区别?

作为开发人员,你可以在应用注册期间选择将应用配置为单租户或多租户:

  • 单租户应用仅在其注册到的租户(也称为宿主租户)中可用。
  • 多租户应用可供其宿主租户以及其他 Microsoft Entra 租户中的用户使用。

如果使用 Azure 门户进行应用注册,则可以通过将受众属性设置为以下值之一来指定应用的租户:

  • 仅此目录中的帐户。 这会形成单租户配置。 实际上,这允许你向租户中的任何安全主体(包括来宾帐户)授予对应用程序的访问权限。
  • 任何 Microsoft Entra 目录中的帐户。 这会形成多租户配置。 这允许组织外部的用户在其各自的 Microsoft Entra 租户中注册应用程序。
  • 任何 Microsoft Entra 目录中的帐户以及个人 Microsoft 帐户(例如 Skype、Xbox、Outlook.com)。 这也会形成多租户配置,但允许拥有个人 Microsoft 帐户的用户使用应用。

注意

应用程序对象仅存在于宿主租户中,但在多租户配置的情况下,它可以由多个服务主体跨不同 Microsoft Entra 租户引用。