You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用限制特定租户用户的Power Automate HTTP触发流失败求助

解决Power Automate流调用的认证冲突问题

问题根源

你碰到的DirectApiRequestHasMoreThanOneAuthorization错误,本质是请求同时使用了两种互斥的认证方式:URL里携带的SAS令牌(sp、sv、sig参数)和请求头中的Bearer token。Power Automate的权限校验逻辑不允许同时叠加多种认证方案。

当设置为“允许任何人调用”时,SAS令牌会被优先识别为有效认证,Bearer token被自动忽略,所以能正常执行;但切换到“仅允许特定租户账号调用”后,系统会严格校验认证逻辑,两种方式的冲突就触发了错误。

解决步骤

  1. 移除URL中的SAS认证参数
    直接删除endpoint里的查询参数部分,只保留流触发的基础路径:

    req.setEndpoint('https://prod-10.westus.logic.azure.com:443/workflows/******/triggers/manual/paths/invoke');
    

    既然已经通过Bearer token做身份验证,SAS参数完全是多余的。

  2. 确认Bearer token的有效性

    • 确保accessToken是从你指定的两个服务账号获取的,且归属目标Office 365租户
    • 检查令牌的aud(受众)和scp(权限范围)字段,确保包含Logic Apps(Power Automate底层依赖)的调用权限,避免权限范围不匹配导致验证失败
  3. 校验流的权限配置
    回到Power Automate流的触发设置页面,确认“允许访问”选项为特定人员,且已准确添加那两个服务账号的UPN或对象ID,避免账号配置错误导致权限校验不通过。

修改后的调用代码示例

HttpRequest req = new HttpRequest();
req.setEndpoint('https://prod-10.westus.logic.azure.com:443/workflows/******/triggers/manual/paths/invoke');
req.setMethod('POST');
req.setHeader('Content-Type','application/json');
req.setHeader('Authorization', 'Bearer '+ accessToken);
Map<String, String> reqBody = new Map<String, String>{
    // 填入你的请求体内容
};
req.setBody(JSON.serialize(reqBody));
HttpResponse res = new Http().send(req);
system.debug('Power automate status code ----> ' + res.getStatusCode());
system.debug('Power automate body -----> '+ res.getBody());

内容的提问来源于stack exchange,提问作者microsoftdeveloperdesigner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 10:05:10