Azure Function配置Easy Auth后调用返回403 Forbidden求助
解决Azure Function Easy Auth客户端凭证模式403禁止访问问题
问题背景
外部Web应用通过Azure AAD OAuth2调用配置了Easy Authentication的Azure Function,已创建两个应用注册:
- 配置Easy Auth时自动生成的API应用注册
- 已配置必要应用权限的客户端应用注册
使用客户端凭证模式获取Token后,携带Bearer Token调用Function地址返回403 Forbidden,提示无权限访问,请求未到达Function逻辑即被Azure拦截。Token包含正确的FunctionReader角色,但验证失败。
排查与解决方案
1. 验证API应用注册配置
- 受众(Audience)匹配:确认Token中的
aud值(api://50a-xx-xxx-xxx)与API应用注册的应用ID URI完全一致,检查是否存在拼写错误或格式问题(必须是api://<client-id>格式)。 - 应用角色与权限授予:
- 进入API应用注册的应用角色页面,确认
FunctionReader角色已正确定义,且允许应用程序类型访问。 - 进入客户端应用注册的API权限页面,确认已添加API应用的
FunctionReader权限,且已完成管理员同意(客户端凭证流需要管理员同意应用权限)。
- 进入API应用注册的应用角色页面,确认
2. 检查Azure Function的Easy Auth配置
- 令牌验证设置:
- 在Function App的Authentication > Azure Active Directory > 管理中,查看令牌验证设置。
- 确保颁发者与Token中的
iss值完全匹配:v1.0令牌颁发者为https://sts.windows.net/<tenant-id>/,v2.0为https://login.microsoftonline.com/<tenant-id>/v2.0。 - 在允许的令牌受众中添加Token的
aud值(api://50a-xx-xxx-xxx),若未配置此项,Easy Auth会拒绝不符合受众的令牌。
- 访问控制(IAM)补充检查:为客户端应用的服务主体添加Function App的Function App Contributor或Reader角色,部分场景下Easy Auth结合IAM才能完成权限校验。
3. 规范请求与Token使用
- 确保请求头的
Authorization格式正确:Bearer <your-access-token>,无多余空格或特殊字符。 - 客户端凭证流必须使用Access Token,禁止使用ID Token(ID Token仅用于用户身份验证,不支持客户端应用的权限校验)。
临时规避方法(仅限测试场景)
- 使用函数密钥调用:在Function App的Functions > 目标函数 > 密钥中获取函数密钥,请求时添加
x-functions-key: <function-key>请求头,跳过Easy Auth验证。 - 临时关闭Easy Auth:在Function App的Authentication设置中,将操作改为允许匿名请求,测试完成后立即恢复身份验证配置。
内容的提问来源于stack exchange,提问作者Moe
相关产品推荐
相关产品推荐

