调用限制特定租户用户的Power Automate HTTP触发流失败求助
解决Power Automate流调用的认证冲突问题
问题根源
你碰到的DirectApiRequestHasMoreThanOneAuthorization错误,本质是请求同时使用了两种互斥的认证方式:URL里携带的SAS令牌(sp、sv、sig参数)和请求头中的Bearer token。Power Automate的权限校验逻辑不允许同时叠加多种认证方案。
当设置为“允许任何人调用”时,SAS令牌会被优先识别为有效认证,Bearer token被自动忽略,所以能正常执行;但切换到“仅允许特定租户账号调用”后,系统会严格校验认证逻辑,两种方式的冲突就触发了错误。
解决步骤
移除URL中的SAS认证参数
直接删除endpoint里的查询参数部分,只保留流触发的基础路径:req.setEndpoint('https://prod-10.westus.logic.azure.com:443/workflows/******/triggers/manual/paths/invoke');既然已经通过Bearer token做身份验证,SAS参数完全是多余的。
确认Bearer token的有效性
- 确保
accessToken是从你指定的两个服务账号获取的,且归属目标Office 365租户 - 检查令牌的
aud(受众)和scp(权限范围)字段,确保包含Logic Apps(Power Automate底层依赖)的调用权限,避免权限范围不匹配导致验证失败
- 确保
校验流的权限配置
回到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
相关产品推荐
相关产品推荐

