开启AAD认证的Logic App HTTP触发器出现Event Grid订阅验证失败
问题原因
这是Azure Logic App原生HTTP触发端点的通用已知问题,已有大量用户遇到相同场景:
Logic App的原生HTTP触发端点认证逻辑优先级为:先校验请求是否携带有效SAS令牌,若未携带SAS令牌才会执行AAD OAuth令牌校验。而Event Grid发送Webhook验证请求时,默认不会携带Logic App要求的触发必填参数,即使AAD令牌校验通过,请求也会被Logic App的触发逻辑拦截,返回非200状态码导致握手失败。
Function App不会出现该问题的原因是其HTTP触发没有强制要求携带SAS或固定参数作为触发前置条件,AAD校验通过就直接放行请求。
规避方案(按优先级排序)
**优先使用Event Grid原生的Logic App事件处理程序类型
创建Event Grid订阅时,事件处理程序类型直接选择「Logic Apps」,无需手动选择Webhook类型,系统会自动完成端点适配和认证逻辑,无需额外配置AAD参数,也不会出现验证握手失败问题,是官方推荐的最优解决方案。自定义Webhook场景补充必填参数
如果必须使用Webhook类型配置订阅,完成以下两个配置即可解决:
- 在Webhook端点末尾拼接Logic App触发器要求的
api-version参数,参考格式如下:https://prod-07.australiaeast.logic.azure.com/workflows/5aade5e78ff84281baf17c0ab70a35d8/triggers/manual/paths/invoke?api-version=2016-10-01 - 在Logic App的AAD认证配置的允许受众列表中添加
https://eventgrid.azure.net,确保Event Grid携带的OAuth令牌受众匹配。
- APIM转发方案
如果现有架构中已经部署了API Management服务,可以继续使用当前的挂载方案,由APIM完成AAD认证校验后补充请求必填参数转发至Logic App。
内容的提问来源于stack exchange,提问作者Thomas
相关产品推荐
相关产品推荐

