在本地开发期间使用开发人员帐户对访问 Azure 服务的 .NET 应用进行身份验证

在本地开发期间,应用程序需要向 Azure 进行身份验证才能使用不同的 Azure 服务。 使用以下方法之一在本地进行身份验证:

本文介绍如何在 Azure 标识库支持的工具中使用开发人员帐户进行身份验证。 在前面的部分中,你将了解:

  • 如何使用 Microsoft Entra 组有效地管理多个开发人员帐户的权限。
  • 如何将角色分配给开发人员帐户以限定权限范围。
  • 如何登录到受支持的本地开发工具。
  • 如何通过应用代码使用开发人员帐户进行身份验证。

支持身份验证的开发人员工具

若要使用开发人员的 Azure 凭据在本地开发期间向 Azure 进行身份验证的应用,开发人员必须从以下开发人员工具之一登录到 Azure:

  • Azure CLI
  • Azure Developer CLI
  • Azure PowerShell
  • Visual Studio
  • Visual Studio Code

Azure 标识库可以检测开发人员是否从其中一个工具登录。 然后,该库可通过工具获取 Microsoft Entra 访问令牌,以将应用作为登录用户向 Azure 进行身份验证。

此方法利用开发人员的现有 Azure 帐户来简化身份验证过程。 但是,开发人员帐户拥有的权限可能比应用需要的权限更多,因此超出了应用在生产环境中运行时使用的权限。 作为替代方法,可以创建在本地开发期间使用的应用程序服务主体,其权限范围仅限应用所需的访问权限。

创建用于本地开发的Microsoft Entra 组

创建Microsoft Entra 组来封装应用在本地开发中所需的角色(权限),而不是将角色分配给单个服务主体对象。 此方法提供以下优势:

  • 每个开发人员在组级别都分配了相同的角色。
  • 如果应用需要新角色,只需将此角色添加到应用的组即可。
  • 如果新开发人员加入团队,则会为开发人员创建一个新的应用程序服务主体并将其添加到组中,确保开发人员有权处理应用。
  1. 导航到 Azure 门户中 Microsoft Entra ID 概述页。

  2. 从左侧菜单中选择 “所有组 ”。

  3. “组 ”页上,选择“ 新建组”。

  4. “新建组 ”页上,填写以下表单字段:

    • 组类型:选择“安全组”
    • 组名称:输入包含对应用或环境名称的引用的组的名称。
    • 组说明:输入说明组用途的说明。

    显示如何在 Azure 门户中创建组的屏幕截图。

  5. 在“成员”下选择“未选择成员”链接,以将成员添加到组中。

  6. 在打开的浮出控件面板中,搜索之前创建的服务主体,并从筛选的结果中选择它。 选择面板底部的 “选择 ”按钮以确认你的选择。

  7. 选择“新建组”页底部的“创建”以创建组并返回到“所有组”页。 如果未看到列出的新组,请稍等片刻并刷新页面。

将角色分配给组

接下来,确定您的应用在何种资源上需要哪些角色(权限),并将这些角色分配给您创建的 Microsoft Entra 组。 可以在资源、资源组或订阅范围为组分配角色。 此示例演示如何在资源组范围内分配角色,因为大多数应用将其所有 Azure 资源分组到单个资源组中。

  1. 在 Azure 门户中,导航到包含应用的资源组的 “概述 ”页。

  2. 在左侧导航栏中,选择“访问控制(IAM)”。

  3. “访问控制”(IAM) 页上,选择“ + 添加 ”,然后从下拉菜单中选择 “添加角色分配 ”。 “添加角色分配”页提供了多个选项卡来配置和分配角色。

  4. 在“ 角色 ”选项卡上,使用搜索框查找要分配的角色。 选择角色,然后选择“ 下一步”。

  5. 在“ 成员 ”选项卡上:

    • 对于 “分配对值的访问权限 ”,请选择“ 用户”、“组”或服务主体
    • 对于 “成员 ”值,选择 “+ 选择成员 ”以打开 “选择成员 ”浮出控件面板。
    • 搜索之前创建的Microsoft Entra 组,并从筛选的结果中选择它。 选择 “选择” 以选择组并关闭浮动面板。
    • 选择“成员”选项卡底部的“审阅 + 分配”。

    显示如何将角色分配给 Microsoft Entra 组的屏幕截图。

  6. 在“ 审阅 + 分配 ”选项卡上,选择页面底部的 “审阅 + 分配 ”。

使用开发人员工具登录到 Azure

接下来,使用多个开发人员工具之一登录到 Azure,这些工具可用于在开发环境中执行身份验证。 进行身份验证的帐户也应该存在于前面创建并配置的 Microsoft Entra 组中。

使用 Visual Studio 2017 或更高版本的开发人员可以通过 IDE 使用其开发人员帐户进行身份验证。 本地运行时,使用 DefaultAzureCredentialVisualStudioCredential 的应用可以发现并使用此帐户对其请求进行身份验证。 将应用直接从 Visual Studio 发布到 Azure 时,也会使用此帐户。

重要

需要 安装 Azure 开发 工作负载 才能为 Azure 身份验证、开发和部署启用 Visual Studio 工具。

  1. 在 Visual Studio 中,导航到 “工具>选项 ”以打开“选项”对话框。

  2. 在顶部的“搜索选项”框中,键入“Azure”来筛选可用选项。

  3. 在“Azure 服务身份验证”下,选择“帐户选择”。

  4. 选择“ 选择帐户 ”下的下拉菜单,然后选择添加Microsoft帐户。

  5. 在打开的窗口中,输入所需 Azure 帐户的凭据,然后确认输入。

    显示如何使用 Visual Studio 登录到 Azure 的屏幕截图。

  6. 选择“确定”来关闭“选项”对话框。

从应用向 Azure 服务进行身份验证

Azure 标识库提供各种凭据-适用于支持不同方案和Microsoft Entra 身份验证流的实现TokenCredential。 前面的步骤演示如何在本地使用用户帐户时使用 DefaultAzureCredential

实现代码

DefaultAzureCredential 是一个有意见的有序机制序列,用于对 Microsoft Entra ID 进行身份验证。 每个身份验证机制都是一个派生自 TokenCredential 类的类,称为“凭据”。 在运行时,DefaultAzureCredential 尝试使用第一个凭据进行身份验证。 如果该凭据无法获取访问令牌,则会尝试序列中的下一个凭据,以此类推,直到成功获取访问令牌。 这样,应用就可在不同的环境中使用不同的凭据,而无需编写特定于环境的代码。

若要使用 DefaultAzureCredential,请将 Azure.IdentityMicrosoft.Extensions.Azure 包添加到应用程序:

在所选终端中,导航到应用程序项目目录并运行以下命令:

dotnet add package Azure.Identity
dotnet add package Microsoft.Extensions.Azure

使用各种 Azure SDK 客户端库中的专用客户端类访问 Azure 服务。 应注册这些类和你自己的自定义服务,以便可以在整个应用中通过依赖项注入来访问它们。 在 Program.cs 中,完成以下步骤以注册客户端类和 DefaultAzureCredential

  1. 通过 using 指令包含 Azure.IdentityMicrosoft.Extensions.Azure 命名空间。
  2. 使用相应的 Add 前缀扩展方法注册 Azure 服务客户端。
  3. DefaultAzureCredential 的实例传递给 UseCredential 方法。
builder.Services.AddAzureClients(clientBuilder =>
{
    clientBuilder.AddBlobServiceClient(
        new Uri("https://<account-name>.blob.core.windows.net"));

    clientBuilder.UseCredential(new DefaultAzureCredential());
});

一种替代UseCredential方法的方式是直接向服务客户端提供凭据:

builder.Services.AddSingleton<BlobServiceClient>(_ =>
    new BlobServiceClient(
        new Uri("https://<account-name>.blob.core.windows.net"),
        new DefaultAzureCredential()));