You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Blazor WASM通过MSAL调用Azure Function下游API权限问题排查

排查Blazor WASM调用Azure Function权限错误的步骤

1. 核对Azure Function的Easy Auth核心配置

  • 确认Function的身份验证/授权设置里,已启用「应用服务身份验证」,且「未验证请求的处理方式」设为「使用Azure Active Directory登录」,避免选「允许匿名」或「返回401」导致权限逻辑冲突。
  • 检查Azure AD提供商配置:确保绑定的是为Function创建的应用注册,客户端ID、租户ID完全匹配,「颁发者URL」格式正确(示例:https://login.microsoftonline.com/{租户ID}/v2.0)。

2. 确认API权限的授予状态

  • 进入Web应用的应用注册「API权限」页面:
    • 已添加Function应用注册暴露的委派权限(Blazor WASM属于前端应用,需用用户身份调用API)。
    • 该权限已完成管理员同意授予(即使是租户内用户,部分场景也需此步骤生效)。

3. 解析AccessToken验证关键声明

  • 在Blazor WASM中添加调试代码,用System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler解析获取到的AccessToken:
    • 检查aud(受众)声明是否完全匹配Function应用注册的应用ID URI(示例:api://{Function应用注册客户端ID}),注意大小写、末尾字符是否一致。
    • 检查scp(范围)声明是否包含Function暴露的权限范围(示例:api://xxx/HelloWorld.Read),缺失则说明权限请求或授予环节出错。
    • 确认Token未过期,exp时间戳在当前时间之后。

4. 检查Function的授权级别与代码逻辑

  • 确认Function的FunctionName属性中,授权级别设为AuthorizationLevel.Anonymous——因为Easy Auth已接管身份验证,若设为Function或Admin会触发双重验证,导致权限错误。
  • 检查Function代码内的自定义权限验证逻辑(如角色、声明检查),确保Token中存在对应声明且符合要求。

5. 验证请求头的Token传递正确性

  • 确认APIAuthMessageHandler已将AccessToken正确加入请求的Authorization头,格式为Bearer {AccessToken},注意Bearer后需加空格,Token需完整无截断。
  • 用浏览器开发者工具或抓包工具捕获请求,检查Authorization头是否存在、格式正确,同时确认请求URL为Function的正确路径(示例:https://{function-app-name}.azurewebsites.net/api/HelloWorld,不可遗漏/api前缀)。

6. 核对Function应用注册的API暴露设置

  • 进入Function的应用注册「公开API」页面:
    • 应用ID URI配置正确,已添加的权限范围(如HelloWorld)的「谁能同意?」设置符合场景(「组织内用户」或「任何人」),若设为「仅管理员」但未完成管理员同意,会导致用户无法获取对应权限的Token。
    • Web应用的应用注册已被添加为「已授权的客户端应用」,且勾选了对应权限范围。

内容的提问来源于stack exchange,提问作者Jason_Hough

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 15:03:16