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