使用开发人员帐户在本地开发期间向Azure服务Java应用进行身份验证

在本地开发期间,应用程序需要进行身份验证,以便访问各种 Azure 服务。 可以使用以下方法之一在本地进行身份验证:

本文介绍如何在Azure标识库支持的工具中使用开发人员帐户进行身份验证。 本文内容:

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

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

在本地开发期间,应用可以使用Azure凭据对Azure进行身份验证。 若要运行此身份验证,必须从开发人员工具登录Azure,例如以下方法之一:

  • Azure CLI
  • Azure开发人员命令行界面
  • Azure PowerShell
  • Visual Studio Code
  • IntelliJ 理念

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 门户中,导航到包含应用的资源组的 Overview 页。

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

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

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

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

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

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

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

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

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

使用 Visual Studio Code 的开发人员可以直接通过中介通过编辑器通过其开发人员帐户进行身份验证。 使用 DefaultAzureCredential 或 VisualStudioCodeCredential 的应用程序可以利用此帐户,通过无缝的单一登录体验来对应用请求进行身份验证。

  1. 在Visual Studio Code中,转到 Extensions 面板并安装 Azure Resources 扩展。 此扩展允许直接从Visual Studio Code查看和管理Azure资源。 它还使用内置Visual Studio Code Microsoft身份验证提供程序对Azure进行身份验证。

    显示 Azure 资源扩展的截图。

  2. 在 Visual Studio Code 中打开命令面板,然后搜索并选择 Azure:登录。

    这张截图显示如何在 Visual Studio Code 中登录到 Azure。

    小窍门

    使用 Windows/Linux 上的 Ctrl+Shift+P 或 macOS 上的 Cmd+Shift+P 打开命令面板。

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

Azure标识库提供支持各种方案和Microsoft Entra身份验证流的 TokenCredential实现。 以下步骤演示如何在本地使用用户帐户时使用 DefaultAzureCredential 或特定的开发工具凭据。

实现代码

  1. 将 azure-identity 依赖项添加到 pom.xml 文件:

    <dependency>
        <groupId>com.azure</groupId>
        <artifactId>azure-identity</artifactId>
    </dependency>
    
  2. 请根据具体情况选择合适的凭据实现。

使用特定于开发工具的凭据

将对应于特定开发工具的 TokenCredential 实例传递给Azure服务客户端构造函数,例如 AzureCliCredential。

import com.azure.identity.AzureCliCredential;
import com.azure.identity.AzureCliCredentialBuilder;
import com.azure.security.keyvault.secrets.SecretClient;
import com.azure.security.keyvault.secrets.SecretClientBuilder;

AzureCliCredential credential = new AzureCliCredentialBuilder().build();

SecretClient client = new SecretClientBuilder()
    .vaultUrl("https://<your-key-vault-name>.vault.azure.net")
    .credential(credential)
    .buildClient();

每个工具凭据都遵循相同的模式。 根据需要替换凭据类型及其相应的生成器:

  • AzureCliCredential / AzureCliCredentialBuilder
  • AzureDeveloperCliCredential / AzureDeveloperCliCredentialBuilder
  • AzurePowerShellCredential / AzurePowerShellCredentialBuilder
  • IntelliJCredential / IntelliJCredentialBuilder
  • VisualStudioCodeCredential / VisualStudioCodeCredentialBuilder

使用可用于任何开发工具的凭据

使用优化用于所有本地开发工具的DefaultAzureCredential实例。 此示例要求将环境变量 AZURE_TOKEN_CREDENTIALS 设置为 dev. 有关详细信息,请参阅 “排除凭据类型类别”。

import com.azure.identity.DefaultAzureCredential;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.azure.security.keyvault.secrets.SecretClient;
import com.azure.security.keyvault.secrets.SecretClientBuilder;

DefaultAzureCredential credential = new DefaultAzureCredentialBuilder()
    .requireEnvVars(AzureIdentityEnvVars.AZURE_TOKEN_CREDENTIALS)
    .build();

SecretClient client = new SecretClientBuilder()
    .vaultUrl("https://<your-key-vault-name>.vault.azure.net")
    .credential(credential)
    .buildClient();

后续步骤

本文介绍了在开发过程中使用计算机上可用的凭据进行身份验证。 这种形式的身份验证是可在Java的Azure SDK中进行身份验证的多种方式之一。 以下文章介绍了其他方法:

如果遇到与开发环境身份验证相关的问题,请参阅 开发环境身份验证疑难解答。

在掌握身份验证后,请参阅 在 Azure SDK for Java 中配置日志记录 以获取有关 SDK 提供的日志功能的信息。