问题描述

使用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,却无法不能正常工作。

【Azure Logic App】使用Event Hub 连接器配置 Active Directory OAuth 认证无法成功连接到中国区Event Hub_microsoft

报错信息:

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.

 

问题解答

根据错误信息 “Error Message: 'ClientSecretCredential authentication failed: AADSTS90002: Tenant 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' not found. ”, 可知获取认证的时候,无法找到Tenant信息,所以无法完成。这是因为在中国Azure中,需要设置正确的Authorityhttps://login.partner.microsoftonline.cn/)。这里虽然配置了正确的Authority,但没有生效,认证请求依旧指向了Global Azure。 

而Logic App是无代码开发,如果配置无法生效的情况下,就只能让Logic App服务团队修复这个问题。

 

目前的代替方案就是使用  Connection String 或 Managed Identity 认证方式。这两种认证方式都可以正常工作!

【Azure Logic App】使用Event Hub 连接器配置 Active Directory OAuth 认证无法成功连接到中国区Event Hub_microsoft_02

 

通过Function App复现问题

我们知道,Logic App使用的就是Function App为框架搭建的服务。为了进一步证明是服务本身的问题,可以通过Function App,创建一个Event Hub Trigger的函数,使用Active Direcotry OAuth认证。来复现同样的问题。

第一步:通过VS 2022创建一个Eevent Hub Trigger的函数

【Azure Logic App】使用Event Hub 连接器配置 Active Directory OAuth 认证无法成功连接到中国区Event Hub_App_03

第二步:配置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 Logic App】使用Event Hub 连接器配置 Active Directory OAuth 认证无法成功连接到中国区Event Hub_Azure_04

 

 

 

参考资料

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

 

当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!