Azure App Service AAD前后端认证调用API返回401问题
Azure App Service EasyAuth 401.83 问题解决方案
核心修复方法
你遇到的401.83 Unauthorized错误由EasyAuth(App Service内置认证模块)的令牌受众校验规则导致,修复步骤如下:
- 登录Azure门户,进入后端*.Net WebAPI*对应的App Service资源页
- 在左侧导航栏选择「身份验证」,点击已配置的Azure AD身份提供程序进入编辑界面
- 找到*Allowed token audiences(允许的令牌受众)*配置项,新增一条记录,值为
api://{后端应用注册的客户端ID}(和你access_token里的aud字段值完全一致) - 保存配置,等待1-2分钟应用生效后,前端携带令牌的API请求即可正常通过认证。
相关疑问解答
为什么自身应用对应的aud需要手动添加?
EasyAuth默认仅自动允许两类受众值通过校验:
- 后端应用注册的纯GUID格式客户端ID
- 格式为
https://<your-app-name>.azurewebsites.net的默认应用ID URI
如果你使用api://<client-id>格式的自定义应用ID URI作为令牌受众,哪怕这个值对应后端应用本身,也不在默认允许范围内,必须手动添加到允许列表。目前官方文档未明确说明该边界规则。
令牌中缺失openid/profile/email声明是否影响令牌有效性?
不影响API访问令牌的有效性。你从/.auth/me端点获取的是专门面向后端API资源的访问令牌,这类令牌不会携带前端用户登录场景使用的openid类声明,只要令牌签名正确、aud匹配、携带对应API作用域,就是API侧认可的有效令牌,之前的401错误和这部分声明缺失无关。
有没有比CLI修改全量JSON更简便的作用域配置方式?
不需要每次通过jq编辑全量auth配置,有两种更简便的方式:
- 门户直接配置:进入前端App Service的「身份验证」页面,打开Azure AD身份提供程序编辑面板,找到「登录参数」配置项,直接添加scope参数,填入需要请求的作用域(包含自定义的
API.ReadOnly作用域),保存即可生效。 - 专用CLI命令配置:使用
az webapp auth aad set专用命令,通过参数直接指定登录请求的作用域,不需要操作全量配置JSON。
为什么找不到az webapp auth set更新的auth.json文件?
该配置文件不属于你应用的站点内容,没有存储在可通过FTP、Kudu访问的wwwroot或其他应用目录中,它是App Service平台层面的托管配置,存储在Azure平台专属的管理存储区,和应用代码文件完全隔离,只能通过Azure门户、CLI、ARM接口或资源浏览器修改。
内容的提问来源于stack exchange,提问作者INNVTV
相关产品推荐
相关产品推荐

