Vue.js SPA调用Azure Functions时Azure B2C认证遇403错误求助
问题场景
我有一个基于Vue.js开发的单页应用(SPA),部署在Azure App Services上,使用Azure B2C和MSAL 2.8.0实现身份验证。SPA调用的Web API基于.NET 8.0开发,以Azure Functions(Function Apps)形式部署。希望用户登录SPA后,通过同一B2C租户使用Easy Authentication对Azure Functions进行身份验证,但在传递正确的Bearer令牌后,持续收到403错误代码。已遵循微软官方文档指导配置但未解决问题,Function App身份验证配置截图如下:
排查与解决建议
- 验证令牌受众(Audience)匹配性
用jwt.ms解析SPA获取的Bearer令牌,检查aud声明是否与Azure Functions对应的B2C应用程序客户端ID完全一致。如果令牌受众是B2C租户定义的API范围(如https://{tenant}.onmicrosoft.com/api),需在Function App的身份验证配置中,将“允许的令牌受众”设置为该范围值,而非客户端ID。 - 核对Function App身份验证核心配置
结合截图确认以下配置:- 登录提供程序是否选择了正确的B2C租户及对应的用户流/自定义策略
- “操作”设置必须选择允许匿名请求(无操作)——因为SPA主动传递令牌,不需要Function App自动跳转登录,若设置为其他选项会触发自动重定向逻辑,导致令牌验证失败
- 确认无额外的令牌过滤规则干扰验证
- 检查令牌签名算法与颁发者
确认令牌的iss声明为正确的B2C租户颁发者URL(格式:https://{tenant}.b2clogin.com/{tenant-id}/{policy-name}/v2.0/),且签名算法为RS256(B2C默认算法)。Easy Auth默认仅验证RS256签名的令牌,若使用HS256会直接拒绝请求。 - 排查Azure Functions代码层面的授权逻辑
检查Function代码中是否添加了正确的[Authorize]属性,是否指定了匹配的授权策略;同时确认host.json中没有禁用身份验证相关配置,也不存在自定义权限验证逻辑拦截请求。 - 验证请求头格式正确性
确认SPA调用Function时,Authorization请求头格式严格为Bearer {token},无多余空格或拼写错误。可直接用Postman携带令牌调用Function测试,排除SPA端请求构造问题。 - 检查B2C应用权限配置
在B2C租户中,确认SPA应用已被授予访问Function App对应API应用的委派权限,且已完成管理员同意(若需);同时确保API应用的“公开API”设置中定义了正确的范围,且SPA请求令牌时已指定该范围。
内容的提问来源于stack exchange,提问作者user3614070
相关产品推荐
相关产品推荐

