如何限制Azure Function仅允许来自自定义Microsoft Teams应用的请求
实现方案(无需依赖前端静态资源的IP白名单)
方案1:Azure AD OAuth2 授权校验(最符合微软生态的推荐方案)
- 进入Azure Function应用的「身份验证」配置页,添加Microsoft作为身份提供商,绑定你的企业AAD租户,开启身份校验功能
- 为Teams前端应用单独注册一个AAD应用,给它授予访问后端Function API的委派权限,限制仅租户内账号可申请该权限
- 前端React代码调用Teams JS SDK获取当前登录用户的AAD访问令牌,发起API请求时在
Authorization头携带Bearer <token> - Azure Function会自动校验令牌的签发租户、受众、权限是否合法,不匹配的请求直接返回401,无有效令牌的外部请求完全无法访问接口
方案2:静态Web应用(SWA)与Function绑定集成
如果你用的是Azure静态Web应用托管Teams前端资源,可以直接用官方的API绑定能力:
- 进入静态Web应用的「API」配置页,关联你现有的Azure Function应用
- 关联后所有发往
/api/*的前端请求会由SWA自动转发到Function,不需要给Function开放公网访问入口 - 直接关闭Function的公网访问权限,或者在Function的网络配置里白名单放行静态Web应用的固定出站IP(可在SWA的概述面板查到),从网络层面完全隔绝外部请求
方案3:自定义签名校验(轻量快速实现)
如果不想配置AAD,也可以用轻量的签名校验方案:
- 前后端约定好唯一的加密密钥,通过静态Web应用的运行时配置注入前端,不要硬编码在前端打包代码中
- 前端发起请求时,将时间戳+请求参数用密钥加密生成签名,放到
X-Req-Signature自定义头中同时携带时间戳 - Function端收到请求后优先校验签名:如果时间差超过5分钟、或者签名计算结果不匹配,直接返回403拒绝访问
额外补充
因为你的应用仅限组织内部使用,可以额外在Azure Function的身份验证配置里开启「仅租户内账号可访问」的限制,进一步缩小攻击面。
内容的提问来源于stack exchange,提问作者Raxak
相关产品推荐
相关产品推荐

