你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

在 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. 浏览到应用注册并选择“新建注册”。

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

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

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

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

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

  6. 选择“注册”。

设置身份验证

服务主体可以使用两种类型的身份验证:基于密码的身份验证(应用程序机密)和基于证书的身份验证。 以下部分介绍如何对应用程序的凭据使用基于密码的身份验证。 或者,可以使用 X509 证书对应用程序进行身份验证。 有关详细信息,请参阅如何配置Microsoft Entra基于证书的身份验证

在本部分的过程中,你将复制以下值: 应用程序 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. 在查询编辑器中执行以下命令,将占位符值 ApplicationIDTenantID 替换为实际值:

    .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.windows.net/{databaseName}")
    .WithAadApplicationKeyAuthentication(
        applicationClientId,
        applicationKey,
        authority);
var client = KustoClientFactory.CreateCslQueryProvider(kcsb);
var queryResult = client.ExecuteQuery($"{query}");

注意

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

有关详细信息,请参阅如何在应用中使用 Microsoft 身份验证库 (MSAL) 进行身份验证,以及如何将 Azure 密钥保管库 与 .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管理员,向租户中的所有用户授予同意,或为特定应用程序启用用户同意。