使用托管标识实现多应用服务访问,无需轮换令牌或凭据
基于Azure托管标识实现Orchestrator API对Small API的无凭据访问(资源组级别配置)
可行性结论
完全可行。通过Azure托管标识+Azure AD身份验证+Azure Policy批量配置,可实现Orchestrator API无需手动交换令牌/凭据、无需修改API代码即可访问Small API,且能在资源组级别完成配置,后续新增Small API可自动继承权限。
具体实现步骤
1. 为Orchestrator API启用系统分配托管标识
系统分配托管标识与App Service绑定,无需额外管理,Azure会自动维护其身份生命周期:
- 门户操作:找到Orchestrator的App Service → 进入「标识」面板 → 开启「系统分配」开关 → 保存后,Azure会生成对应的Azure AD身份对象。
- CLI命令:
执行后记录返回的az webapp identity assign --name <Orchestrator-App-Service-Name> --resource-group <Target-Resource-Group-Name>principalId,后续权限配置会用到。
2. 配置Small API的Azure AD身份验证(网关层处理,无需改代码)
每个Small API的App Service通过Azure AD认证拦截未授权请求,无需修改API业务代码:
- 单个API操作示例:进入Small API的App Service → 「身份验证」→ 「添加身份提供者」→ 选择「Azure AD」→ 选择「创建新的Azure AD应用」(或复用现有)→ 设置「未经验证的请求」为「HTTP 401 未经授权」→ 保存。
- 资源组级别批量配置:通过Azure Policy自动为资源组内所有(含新增)Small API启用AD认证,避免逐个操作。
3. 资源组级别分配Orchestrator的访问权限
通过Azure Policy实现资源组内Small API的权限批量配置,确保Orchestrator的托管标识能自动访问所有Small API:
- 创建自定义Policy定义,核心逻辑为:
- 识别资源组内的App Service(Small API)对应的Azure AD应用。
- 将Orchestrator托管标识的
principalId添加到该AD应用的允许访问列表,或分配对应的应用权限。
- 分配该Policy到目标资源组,后续新增的Small API会自动触发Policy执行,完成权限配置。
4. Orchestrator API调用Small API的无代码适配
Orchestrator API使用Azure SDK调用Small API时,会自动利用托管标识获取并附加访问令牌,无需手动处理令牌交换:
- 例如在.NET 6中使用
HttpClient,只需配置使用托管标识:
注:若使用Azure App Service的内置功能,甚至无需编写上述代码,通过配置「出站流量身份验证」即可自动附加令牌。var client = new HttpClient(); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", await GetManagedIdentityTokenAsync()); // 其中GetManagedIdentityTokenAsync由Azure SDK自动处理,无需手动实现
关键注意事项
- 无需修改代码的核心原因:Small API的身份验证由App Service网关层完成,请求到达API代码前已完成授权;Orchestrator的令牌获取由Azure SDK自动处理,无需手动编写凭据交换逻辑。
- 资源组级别配置的核心:Azure Policy是实现批量、自动配置的关键,确保新增Small API无需重复手动设置权限。
- 托管标识选择:优先使用系统分配托管标识,避免额外的身份资源管理成本;若需跨资源组访问,可考虑用户分配托管标识。
内容的提问来源于stack exchange,提问作者ezycoder
相关产品推荐
相关产品推荐

