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

从终端访问受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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 01:12:41