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

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

创建 Microsoft Entra 应用程序注册

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

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

注册应用

  1. 登录到 Azure 门户,然后打开“Microsoft Entra ID”边栏选项卡。

  2. 浏览到“应用注册”,然后选择“新注册”。

    Screenshot showing how to start a new app registration.

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

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

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

    Screenshot showing how to register a new app registration.

  6. 选择“注册”。

设置身份验证

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

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

  1. 浏览到“概述”边栏选项卡。

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

    注意

    你将需要应用程序 ID 和租户 ID 来向服务主体授予访问数据库的权限

  3. 在“证书和机密”边栏选项卡中,选择“新建客户端密码”。

    Screenshot showing how to start the creation of client secret.

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

  5. 选择 添加

  6. 复制密钥值。

    注意

    离开此页后,将无法访问密钥值。

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

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

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

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

  1. 浏览到“应用注册”的“API 权限”边栏选项卡。

  2. 选择添加权限

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

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

    Screenshot showing how to add Azure Data Explorer API permission.

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

  6. 选择“添加权限”。

    Screenshot showing how to select delegated permissions with user impersonation.

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

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

  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 管理员,向租户中的所有用户授予同意,或者为特定应用程序启用用户同意。