在 Azure 数据资源管理器中创建 Microsoft Entra 应用程序注册

对需要访问 Azure 数据资源管理器且没有用户存在的应用程序(例如无人参与服务或计划流)使用 Microsoft Entra 应用程序身份验证 。 如果使用应用程序(例如 Web 应用)连接到 Azure 数据资源管理器数据库,请使用服务主体身份验证进行身份验证。 本文介绍如何创建和注册Microsoft Entra 服务主体,然后授权其访问 Azure 数据资源管理器数据库。

创建 Microsoft Entra 应用程序注册

Microsoft Entra 应用程序身份验证要求创建应用程序并将其注册到 Microsoft Entra ID。 在 Microsoft Entra 租户中创建应用程序注册时,会自动创建服务主体。

可以在 Azure 门户中创建应用注册,也可以使用 Azure CLI 以编程方式创建。 选择适合你的方案的选项卡。

注册应用

  1. 登录到 Azure 门户 并打开 Microsoft Entra ID

  2. 在左侧导航窗格中,转到 “管理”。 选择 “应用注册” ,然后选择 “新建注册”。

    显示如何开始新应用注册的屏幕截图。

  3. 输入应用程序的名称,例如“example-app”。

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

  5. 在“重定向 URI”下,选择“Web”作为要创建的应用程序类型。 URI 是可选的,本例中将其留空。

    显示如何注册新应用的屏幕截图。

  6. 选择“注册”。

设置身份验证

两种类型的身份验证可用于服务主体:基于密码的身份验证(应用程序机密)和基于证书的身份验证。 以下部分介绍如何对应用程序的凭据使用基于密码的身份验证。 或者可以使用 X509 证书对应用程序进行身份验证。

在本部分中,将复制以下值: 应用程序 ID密钥值。 将这些值粘贴到某个位置(如文本编辑器),以便在步骤将客户端凭据配置到数据库中使用。

  1. 浏览到 “概述 ”部分。

  2. 复制 应用程序(客户端)ID目录(租户)ID

    注释

    需要应用程序 ID 和租户 ID 来 授权服务主体访问数据库

  3. 在左侧导航窗格中,转到 “管理”。 选择 “证书和机密 ”和 “新建客户端机密”。

    显示如何开始创建客户端密码的屏幕截图。

  4. 输入说明和到期时间。

  5. 选择 并添加

  6. 复制密钥值。

    注释

    离开此页面时,无法访问密钥值。

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

为应用程序配置委托的权限 - 可选

如果应用程序需要使用调用用户的凭据访问数据库,请为应用程序配置委派权限。 例如,如果要生成 Web API,并且想要使用 调用 API 的用户的凭据进行身份验证。

如果只需要访问授权的数据资源,则可以跳过本部分并继续向服务主体授予访问数据库的权限

  1. 浏览到应用注册API 权限部分。

  2. 选择“添加权限”。

  3. 选择“我的组织使用的 API”。

  4. 搜索并选择“Azure 数据资源管理器”。

    显示如何添加 Azure 数据资源管理器 API 权限的屏幕截图。

  5. 在“委托的权限”中,选择“user_impersonation”选项框。

  6. 选择“添加权限”。

    显示如何通过用户模拟选择委托权限的屏幕截图。

向服务主体授予访问数据库的权限

创建应用程序注册后,向相应的服务主体授予对数据库的访问权限。 以下示例授予查看器访问权限。 对于其他角色,请参阅管理数据库权限

  1. 使用上一步骤中复制的应用程序 ID 和租户 ID 的值。

  2. 在查询编辑器中执行以下命令,将占位符值 ApplicationID 和 TenantID 替换为实际值:

    .add database <DatabaseName> viewers ('aadapp=<ApplicationID>;<TenantID>') '<Notes>'
    

    例如:

    .add database Logs viewers ('aadapp=1234abcd-e5f6-g7h8-i9j0-1234kl5678mn;9876abcd-e5f6-g7h8-i9j0-1234kl5678mn') 'App Registration'
    

    最后一个参数是字符串,当查询与数据库关联的角色时,该字符串会显示为注释。

    注释

    创建应用程序注册后,可能需要等待几分钟才能引用它。 如果收到找不到应用程序的错误,请等待并重试。

有关角色的详细信息,请参阅基于角色的访问控制

使用应用程序凭据访问数据库

使用应用程序凭据通过客户端库以编程方式访问数据库。

. . .
string applicationClientId = "<myClientID>";
string applicationKey = "<myApplicationKey>";
string authority = "<myApplicationTenantID>";
. . .
var kcsb = new KustoConnectionStringBuilder($"https://{clusterName}.kusto.chinacloudapi.cn/{databaseName}")
    .WithAadApplicationKeyAuthentication(
        applicationClientId,
        applicationKey,
        authority);
var client = KustoClientFactory.CreateCslQueryProvider(kcsb);
var queryResult = client.ExecuteQuery($"{query}");

注释

指定之前创建的应用程序注册(服务主体)的应用程序 ID 和密钥。

有关详细信息,请参阅如何在应用中使用 Microsoft 身份验证库 (MSAL) 进行身份验证将 Azure Key Vault 与 .NET Core Web 应用配合使用

故障排除

“资源无效”错误

如果应用程序对用户或应用程序进行身份验证以访问,请为服务应用程序设置委派权限。 声明应用程序可以对用户或应用程序进行身份验证以进行访问。 否则,尝试身份验证时将发生错误。 错误消息类似于以下消息:

AADSTS650057: Invalid resource. The client has requested access to a resource which is not listed in the requested permissions in the client's application registration...

请遵循在 为应用程序配置委派权限中的说明。

你的 Microsoft Entra 租户管理员可以制定一种策略,阻止租户用户向应用程序提供同意。 当用户尝试登录你的应用程序时,会出现类似以下错误的情况:

AADSTS65001: The user or administrator has not consented to use the application with ID '<App ID>' named 'App Name'

请联系Microsoft Entra 管理员,为租户中的所有用户授予许可,或为特定应用程序启用用户同意。