Azure ACR至App Service容器应用Webhook调用401未授权问题排查
以下是针对该问题的核心排查与修复步骤:
1. 检查SCM认证模式
进入App Service的配置 > 常规设置,确认SCM类型设置为基本。如果设为仅Azure AD或禁用,ACR的Webhook使用基础认证调用时必然返回401。若需保留Azure AD认证,需为ACR配置Azure AD服务主体并使用令牌认证,但基础认证是更简洁的方案。
2. 验证发布凭据有效性
ACR Webhook必须使用App Service的发布凭据(而非管理员账号或其他凭证)。你可以在App Service的部署中心 > FTPS凭据页面获取或重置这些凭据。
手动验证凭据:
curl -u <发布用户名>:<发布密码> https://<你的应用名>.scm.azurewebsites.net/docker/hook
返回200 OK则凭据有效;若仍401,重置凭据后重新配置Webhook。
3. 检查IP访问限制
查看App Service的网络 > 访问限制,确保ACR的出站IP地址被允许访问SCM站点。ACR的出站IP可在ACR概述 > 属性中找到。若启用了访问限制,需将ACR的IP范围加入允许列表,也可勾选"允许Azure服务访问"以避免IP变更带来的问题。
4. 确认Webhook端点格式
ACR中配置的Webhook端点必须是标准的SCM Docker钩子地址:https://<你的应用名>.scm.azurewebsites.net/docker/hook,务必包含.scm子域名,不要添加多余路径。
5. 排查Kudu站点状态
访问https://<你的应用名>.scm.azurewebsites.net,用发布凭据登录,确认Kudu站点正常运行。如果登录失败,说明SCM基础认证确实故障,尝试重启App Service后再测试。
6. 核对ACR Webhook认证配置
在ACR的Webhook设置中,确认服务URI的认证方式选择基本,并正确填入发布用户名和密码。若选了无,会直接触发401错误。
内容的提问来源于stack exchange,提问作者SanjayD

