创建可访问资源的 Microsoft Entra 应用程序和服务主体

在本文中,你将了解如何创建可以与基于角色的访问控制配合使用的 Microsoft Entra 应用程序和服务主体。 在 Microsoft Entra ID 中注册新应用程序时,系统会自动为应用注册创建服务主体。 服务主体是应用在 Microsoft Entra 租户中的标识。 资源访问权限受分配给服务主体的角色限制,可用于控制哪些资源可以访问以及在哪个级别进行访问。 出于安全原因,始终建议将服务主体与自动化工具配合使用,而不是允许它们使用用户标识进行登录。

在本文中,你将在 Azure 门户中创建单个租户应用程序。 此示例适用于在一个组织内使用的业务线应用程序。 还可以使用 Azure PowerShellAzure CLI 来创建服务主体。

重要

请考虑使用 Azure 资源的托管标识作为应用程序标识,而不是创建服务主体。 如果代码在支持托管标识的服务上运行并访问支持 Microsoft Entra 身份验证的资源,则托管标识是更好的选择。 若要详细了解 Azure 资源的托管标识(包括当前支持它的服务),请参阅什么是 Azure 资源的托管标识?

有关应用注册、应用对象和服务主体之间关系的详细信息,请参阅 Microsoft Entra ID 中的应用程序对象和服务主体对象

先决条件

若要在 Microsoft Entra 租户中注册应用程序,需要:

注册应用所需的权限

必须具有足够的权限向 Microsoft Entra 租户注册应用程序,并向应用程序分配 Azure 订阅中的角色。 若要完成这些任务,需要 Application.ReadWrite.All 权限。

向 Microsoft Entra ID 注册应用程序并创建服务主体

提示

本文中的步骤可能因开始使用的门户而略有不同。

  1. 至少以云应用程序管理员身份登录到 Microsoft Entra 管理中心

  2. 浏览到“标识”>“应用程序”>“应用注册”,然后选择“新建注册”。

  3. 为应用程序命名,例如“example-app”。

  4. 选择支持的帐户类型,它决定了谁可以使用应用程序。

  5. 在“重定向 URI”下,选择“Web”作为要创建的应用程序类型。 输入访问令牌将发送到的 URI。

  6. 选择“注册” 。

    Type a name for your application.

现已创建了 Microsoft Entra 应用程序和服务主体。

向应用程序分配角色

若要访问订阅中的资源,必须将角色分配给应用程序。 判定哪个角色能为应用程序提供适当的权限。 若要了解可用角色,请参阅 Azure 内置角色

可将作用域设置为订阅、资源组或资源级别。 较低级别的作用域会继承权限。

  1. 登录 Azure 门户

  2. 选择要将应用程序分配到的范围级别。 例如,若要在订阅范围内分配角色,搜索并选择“订阅”。 如果未看到所需订阅,请选择“全局订阅筛选器”。 请确保已为该租户选择所需的订阅。

  3. 选择“访问控制 (IAM)”。

  4. 依次选择“+ 添加”和“添加角色分配” 。

  5. 在“角色”选项卡中,选择要分配给列表中的应用程序的角色。 例如,若要允许应用程序执行诸如“重新启动”、“启动”和“停止”实例之类的操作,请选择“参与者”角色。

  6. 选择“下一步”。

  7. 在“成员”选项卡上,选择“将访问权限分配到”,然后选择“用户、组或服务主体”

  8. 选择“选择成员”。 默认情况下,可用选项中不显示 Microsoft Entra 应用程序。 若要查找应用程序,请按其名称搜索它。

  9. 选择“选择”按钮,然后选择“查看 + 分配”。

    Screenshot showing role assignment.

服务主体已设置完毕。 可以开始使用它运行脚本或应用。 若要管理服务主体(权限、用户同意权限、查看已同意的用户、查看权限、查看登录信息等),请访问“企业应用程序”。

下一部分演示如何获取以编程方式登录时所需的值。

登录应用程序

以编程方式登录时,请在身份验证请求中传递租户 ID 和应用程序 ID。 还需要一个证书或身份验证密钥。 获取目录(租户)ID 和应用程序 ID:

  1. 浏览到“标识”>“应用程序”>“应用注册”,然后选择应用程序。
  2. 在应用的概述页上,复制“目录(租户) ID”值并将其存储在应用程序代码中。
  3. 复制“应用程序(客户端) ID”值并将其存储在应用程序代码中。

设置身份验证

服务主体可以使用两种类型的身份验证:基于密码的身份验证(应用程序机密)和基于证书的身份验证。 建议使用证书颁发机构颁发的受信任证书,但你也可以创建应用程序机密或创建自签名证书来进行测试。

若要上传证书文件,请执行以下操作:

  1. 浏览到“标识”>“应用程序”>“应用注册”,然后选择应用程序。
  2. 选择“证书和机密”。
  3. 依次选择“证书”、“上传证书”和要上传的证书文件。
  4. 选择“添加” 。 上传证书后,将显示指纹、开始日期和到期日期值。

在应用程序注册门户中将证书注册到应用程序后,请启用机密客户端应用程序代码以使用该证书。

选项 2:仅测试 - 创建并上传自签名证书

(可选)可以创建自签名证书,仅限测试目的。 打开 Windows PowerShell 并使用以下参数运行 New-SelfSignedCertificate,以在计算机上的用户证书存储中创建自签名证书:

$cert=New-SelfSignedCertificate -Subject "CN=DaemonConsoleCert" -CertStoreLocation "Cert:\CurrentUser\My"  -KeyExportPolicy Exportable -KeySpec Signature

使用可从 Windows 控制面板访问的管理用户证书 MMC 管理单元将此证书导出到文件。

  1. 从“开始”菜单中选择“运行”,然后输入“certmgr.msc” 。 此时会显示当前用户的证书管理器工具。
  2. 若要查看证书,请在左窗格中的“证书 - 当前用户”下,展开“个人”目录。
  3. 右键单击创建的证书,选择“所有任务”>“导出”。
  4. 按证书导出向导的要求操作。

若要上传证书,请执行以下操作:

  1. 浏览到“标识”>“应用程序”>“应用注册”,然后选择应用程序。
  2. 选择“证书和机密”。
  3. 依次选择“证书”、“上传证书”,然后选择证书(现有证书或已导出的自签名证书)。
  4. 选择 添加

在应用程序注册门户中将证书注册到应用程序后,请启用机密客户端应用程序代码以使用该证书。

选项 3:创建新的客户端密码

如果选择不使用证书,则可以创建新的客户端密码。

  1. 浏览到“标识”>“应用程序”>“应用注册”,然后选择应用程序。
  2. 选择“证书和机密”。
  3. 选择“客户端密码”,然后选择“新建客户端密码”。
  4. 提供机密的说明和持续时间。
  5. 选择 添加

保存客户端密码后,将显示客户端密码的值。 此值仅显示一次,因此请复制此值并将其存储在应用程序可以检索它的位置,通常是应用程序保存 clientId 等值的位置,或是源代码中的 authoruty。 提供密钥值及应用程序的客户端 ID,以该应用程序的身份登录。

Screenshot showing the client secret.

在资源上配置访问策略

你可能需要对应用程序需要访问的资源配置额外权限。 例如,你还必须更新密钥保管库的访问策略,以使应用程序能够访问密钥、机密或证书。

配置访问策略:

  1. 登录 Azure 门户

  2. 选择自己的密钥保管库,然后选择“访问策略”。

  3. 选择“添加访问策略”,然后选择要授予应用程序的密钥、机密和证书权限。 选择之前创建的服务主体。

  4. 选择“添加”以添加访问策略。

  5. 保存。

    Add access policy

后续步骤