对需要访问 Azure 数据资源管理器且没有用户存在的应用程序(例如无人参与服务或计划流)使用 Microsoft Entra 应用程序身份验证 。 如果使用应用程序(例如 Web 应用)连接到 Azure 数据资源管理器数据库,请使用服务主体身份验证进行身份验证。 本文介绍如何创建和注册Microsoft Entra 服务主体,然后授权其访问 Azure 数据资源管理器数据库。
创建 Microsoft Entra 应用程序注册
Microsoft Entra 应用程序身份验证要求创建应用程序并将其注册到 Microsoft Entra ID。 在 Microsoft Entra 租户中创建应用程序注册时,会自动创建服务主体。
可以在 Azure 门户中创建应用注册,也可以使用 Azure CLI 以编程方式创建。 选择适合你的方案的选项卡。
注册应用
登录到 Azure 门户 并打开 Microsoft Entra ID。
在左侧导航窗格中,转到 “管理”。 选择 “应用注册” ,然后选择 “新建注册”。
输入应用程序的名称,例如“example-app”。
选择支持的帐户类型,它决定了谁可以使用应用程序。
在“重定向 URI”下,选择“Web”作为要创建的应用程序类型。 URI 是可选的,本例中将其留空。
选择“注册”。
设置身份验证
两种类型的身份验证可用于服务主体:基于密码的身份验证(应用程序机密)和基于证书的身份验证。 以下部分介绍如何对应用程序的凭据使用基于密码的身份验证。 或者可以使用 X509 证书对应用程序进行身份验证。
在本部分中,将复制以下值: 应用程序 ID 和 密钥值。 将这些值粘贴到某个位置(如文本编辑器),以便在步骤将客户端凭据配置到数据库中使用。
浏览到 “概述 ”部分。
复制 应用程序(客户端)ID 和 目录(租户)ID。
注释
需要应用程序 ID 和租户 ID 来 授权服务主体访问数据库。
在左侧导航窗格中,转到 “管理”。 选择 “证书和机密 ”和 “新建客户端机密”。
输入说明和到期时间。
选择 并添加。
复制密钥值。
注释
离开此页面时,无法访问密钥值。
你创建了Microsoft Entra 应用程序和服务主体。
为应用程序配置委托的权限 - 可选
如果应用程序需要使用调用用户的凭据访问数据库,请为应用程序配置委派权限。 例如,如果要生成 Web API,并且想要使用 调用 API 的用户的凭据进行身份验证。
如果只需要访问授权的数据资源,则可以跳过本部分并继续向服务主体授予访问数据库的权限。
浏览到应用注册的 API 权限部分。
选择“添加权限”。
选择“我的组织使用的 API”。
搜索并选择“Azure 数据资源管理器”。
在“委托的权限”中,选择“user_impersonation”选项框。
选择“添加权限”。
向服务主体授予访问数据库的权限
创建应用程序注册后,向相应的服务主体授予对数据库的访问权限。 以下示例授予查看器访问权限。 对于其他角色,请参阅管理数据库权限。
使用上一步骤中复制的应用程序 ID 和租户 ID 的值。
在查询编辑器中执行以下命令,将占位符值 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 管理员,为租户中的所有用户授予许可,或为特定应用程序启用用户同意。