问题描述
使用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.
问题解答
根据错误信息 “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 连接字符串。
第三步:本地执行,复现 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
当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!