同一Azure App Service Plan下,如何限制API应用仅允许前端应用访问?
解决方案:限制Azure App Service中API仅接受指定前端应用访问
针对同一App Service Plan下API应用需仅允许前端应用访问、且出站IP不固定的场景,推荐以下几种可行方案:
1. Azure AD身份验证(推荐方案)
- 给API应用启用Azure AD身份验证,设置为仅允许已认证用户/应用访问,拒绝匿名请求。
- 在Azure AD中为前端应用注册应用程序,配置其对API应用的访问权限(添加API权限,选择API应用的自定义范围)。
- 前端应用调用API时,使用MSAL库获取针对API应用的访问令牌,在请求头中携带
Authorization: Bearer <令牌>。 - API应用验证令牌的发行者(iss)和受众(aud),同时检查令牌中的
appid声明是否为前端应用的客户端ID,确保请求来自指定前端。 - 优势:完全基于身份验证,不受IP变更影响;符合Azure安全最佳实践,无需依赖网络配置。
2. 托管标识(Managed Identity)+ 自定义中间件
- 为前端应用启用系统分配的托管标识。
- 前端调用API时,获取托管标识的访问令牌(目标资源为API应用的应用ID URI),并在请求头中传递。
- API应用添加自定义中间件,验证令牌的
appid是否匹配前端应用的托管标识客户端ID,验证通过则允许访问。 - 可选:结合API应用的访问限制规则,先允许所有Azure服务流量进入,再通过中间件做身份校验,进一步缩小访问范围。
3. 虚拟网络(VNet)集成隔离
- 将所有三个应用配置为集成到同一个Azure虚拟网络(VNet)中(需App Service Plan为Basic及以上层级)。
- 在API应用的访问限制中,添加规则仅允许来自该VNet的私有IP范围访问。
- 优势:网络层面实现隔离,无需额外身份验证逻辑;但需要配置VNet资源,可能产生额外成本,且迁移现有应用到VNet需注意网络配置兼容性。
4. 自定义API密钥验证(简易方案)
- 前端与API应用约定一个强密钥(如随机生成的长字符串),前端调用API时在请求头(如
X-API-Key)中携带该密钥。 - API应用在接收请求时,校验请求头中的密钥是否与预存的密钥一致,一致则允许访问。
- 注意:需定期轮换密钥,避免密钥泄露;该方案安全性低于身份验证方案,仅适合低敏感场景。
内容的提问来源于stack exchange,提问作者Arsalan
相关产品推荐
相关产品推荐

