从终端访问受Entra ID易认证保护的Azure Function API遇权限问题求助
解决Entra ID Easy-Auth保护的Azure Function API权限问题
以下是针对问题的具体排查和解决步骤:
1. 验证Access Token的受众(Audience)
用jwt.io解析你从/.auth/me获取的access_token,重点查看aud字段:
- 该值必须与你的Function应用客户端ID完全匹配(可在Azure门户的Function应用→身份验证→Entra ID提供商→管理中找到应用程序ID)
- 如果
aud是类似https://management.azure.com/的默认值,说明登录时请求的资源错误,需重新登录并指定Function的客户端ID作为资源:
登录后再从# 替换<function-client-id>和<function-app-name>后访问该URL登录 https://<function-app-name>.azurewebsites.net/.auth/login/aad?resource=<function-client-id>/.auth/me获取的token就会拥有正确的受众。
2. 检查Entra ID身份提供商的受众配置
在Azure门户进入你的Function应用→身份验证→编辑Entra ID提供商:
- 确保“允许的令牌受众”列表中包含你的Function客户端ID
- 单租户场景下,不要使用“任何组织目录中的账户”选项,必须明确添加自身的客户端ID
3. 确认Token包含正确的权限范围
解析token查看scp字段:
- 必须包含Function应用暴露的权限(比如默认的
user_impersonation) - 如果没有对应scope,需在Entra ID中配置权限:
- 进入Entra ID→应用注册→找到你的Function应用→API权限
- 添加客户端权限,选择对应的scope,然后授予管理员同意(针对租户级访问)
4. 修正Curl请求的Token携带方式
确保调用API时正确设置Authorization头,格式不能出错:
curl -H "Authorization: Bearer <your-access-token>" https://<function-app-name>.azurewebsites.net/api/<your-function>
注意Bearer与token之间有空格,不要遗漏或拼写错误。
5. 调整Function应用的身份验证行为
进入Function应用→身份验证:
- 确认“未经过身份验证的请求”设置为HTTP 401 未经授权(终端调用为无界面场景,不能使用重定向模式)
- 确保“操作”设置为“登录请求”,而非允许匿名访问
6. 排查Token获取流程
如果你通过/.auth/login/aad登录,必须附加resource参数指定Function的客户端ID,否则默认获取的token是用于Entra ID Graph API的,无法通过Function的权限校验。
内容的提问来源于stack exchange,提问作者Robert Petersson
相关产品推荐
相关产品推荐

