【Azure Logic App】使用Event Hub 连接器配置 Active Directory OAuth 认证无法成功连接到中国区Event Hub
问题描述
使用Logic App服务,创建Event Hub触发的Workflow。 根据以下信息配置Event Hub连接器的Active Directory OAuth认证方式:
- Authentication Type 选择“Active Directory OAuth”
- Fully Qualified Namespace 输入目标 Event Hub Namespace的Host Name, 如 myehnamespace.servicebus.chinacloudapi.cn
- Authoriy 输入中国区Azure的Authority,值为:https://login.partner.microsoftonline.cn/
- Tenant 输入自己在AAD中注册应用的Tenant ID
- Credential Type 选择 “Secret”
- Client ID 输入在AAD中注册应用的Application ID ( Client ID)
- Client Secret 输入在AAD中注册应用生成的密钥
在正确配置以上信息后。保存Workflow,却无法不能正常工作。
报错信息:
2024-08-17T08:40:30Z [Error] An exception occurred while retrieving properties for Event Hub: logicapp. Error Message: 'ClientSecretCredential authentication failed: AADSTS90002: Tenant 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' not found. Check to make sure you have the correct tenant ID and are signing into the correct cloud. Check with your subscription administrator, this may happen if there are no active subscriptions for the tenant.
问题解答
根据错误信息 “Error Message: 'ClientSecretCredential authentication failed: AADSTS90002: Tenant 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' not found. ”, 可知获取认证的时候,无法找到Tenant信息,所以无法完成。这是因为在中国Azure中,需要设置正确的Authority(https://login.partner.microsoftonline.cn/)。这里虽然配置了正确的Authority,但没有生效,认证请求依旧指向了Global Azure。
而Logic App是无代码开发,如果配置无法生效的情况下,就只能让Logic App服务团队修复这个问题。
目前的代替方案就是使用 Connection String 或 Managed Identity 认证方式。这两种认证方式都可以正常工作!
通过Function App复现问题
我们知道,Logic App使用的就是Function App为框架搭建的服务。为了进一步证明是服务本身的问题,可以通过Function App,创建一个Event Hub Trigger的函数,使用Active Direcotry OAuth认证。来复现同样的问题。
第一步:通过VS 2022创建一个Eevent Hub Trigger的函数
第二步:配置Active Directory OAuth信息
在 local.settings.json 文件中,用 TEST_EVENTHUB_AUTH__fullyQualifiedNamespace等系列配置 替换 TEST_EVENTHUB_AUTH 连接字符串。
{ "IsEncrypted": false, "Values": { "FUNCTIONS_INPROC_NET8_ENABLED": "1", "FUNCTIONS_WORKER_RUNTIME": "dotnet", "AzureWebJobsStorage": "... ... ... ", //"TEST_EVENTHUB_AUTH": "... ... ... ", "TEST_EVENTHUB_AUTH__fullyQualifiedNamespace": "youreventhubnamespacename.servicebus.chinacloudapi.cn", "TEST_EVENTHUB_AUTH__blobServiceUri": "https://xxxx.blob.core.chinacloudapi.cn/", "TEST_EVENTHUB_AUTH__queueServiceUri": "https://xxxx.queue.core.chinacloudapi.cn/", "TEST_EVENTHUB_AUTH__tenantId": "xxxx-xxxx-xxxx-xxxx-xxxx", "TEST_EVENTHUB_AUTH__clientId": "xxxx-xxxx-xxxx-xxxx-xxxx", "TEST_EVENTHUB_AUTH__clientSecret": "xxxxxxxxxxxxxxxxxxxxxxxxxxxx", "TEST_EVENTHUB_AUTH__Authority": "https://login.partner.microsoftonline.cn/" } }
第三步:本地执行,复现 AADSTS90002 错误
参考资料
Azure Functions 开发人员指南 : https://docs.azure.cn/zh-cn/azure-functions/functions-reference?tabs=blob&pivots=programming-language-csharp#local-development-with-identity-based-connections
在函数应用中连接到服务总线 : https://docs.azure.cn/zh-cn/azure-functions/functions-identity-based-connections-tutorial-2#connect-to-the-service-bus-in-your-function-app
当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!