使用Azure Managed Identity向App Service认证时Logic App调用API返回403如何解决
问题解决方案
你目前缺少的核心是托管身份的权限授权、以及Web API侧的应用权限校验配置,具体操作步骤如下:
1. 为托管身份授予API应用权限
- 进入Web API对应的App Registration管理页,打开「公开API」选项卡,创建应用类型的权限(不要选委托权限,托管身份为服务主体,仅支持应用权限),自定义权限名称如
Api.Application.Access,保存后记录权限值。 - 打开Azure AD「企业应用程序」页面,搜索你Logic App的名称,找到对应的系统分配托管身份的服务主体条目。
- 进入该服务主体的「权限」页,点击「添加权限」,切换到「我的组织使用的API」标签,搜索选中你的Web API的App Registration,勾选上一步创建的应用权限,最后点击「授予<租户名>的管理员同意」完成授权。
2. 调整.NET Web API的授权逻辑
默认[Authorize]属性仅校验令牌的有效性、受众等基础字段,不会校验权限声明,需要补充权限校验规则:
代码配置示例(.NET 6+)
// Program.cs 中添加授权策略 builder.Services.AddAuthorization(options => { options.AddPolicy("ApplicationAccessPolicy", policy => { // 校验令牌中是否包含我们定义的应用权限角色声明 policy.RequireClaim("roles", "Api.Application.Access"); }); }); // 启用授权中间件 app.UseAuthorization();
修改接口授权属性
将原有的[Authorize]替换为[Authorize(Policy = "ApplicationAccessPolicy")],如果需要全局生效可以设置为默认授权策略。
3. 可选校验项
确认Logic App HTTP连接器中填写的Audience值,和Web API App Registration「公开API」页的应用程序ID URI完全一致,不要多写斜杠、路径等后缀。
内容的提问来源于stack exchange,提问作者Mo B.
相关产品推荐
相关产品推荐

