Next-auth v5本地正常,部署Azure App Service后回调404问题
问题描述
Next.js应用集成next-auth v5后本地运行完全正常,但部署到Azure App Service后认证功能失效。选择Microsoft Entra ID(原Azure Active Directory)账号授权后,访问my-application.azurewebsites.net/api/auth/callback/microsoft-entra-id?code=long-code时出现HTTP ERROR 404。
环境对比
- 本地环境:authorize请求、reprocess请求、
/api/auth/callback/microsoft-entra-id请求全部成功,功能符合预期 - Azure App Service环境:authorize请求、reprocess请求成功,但回调请求返回404 Not Found
相关环境信息
- Node: 20.12.2;npm:10.5.0
- 浏览器:Edge Chromium 123.0.2420.81、IE11
- npm包:
next@14.2.3、next-auth@5.0.0-beta.18、react@18.2.0
已尝试操作
- 直接访问动态路由时,最初被重定向至
https://0.0.0.0/api/auth/error?error=Configuration - 设置
AUTH_URL环境变量为my-application.azurewebsites.net/api/auth后,直接访问路由显示服务器配置错误,日志提示InvalidCheck: PKCE code_verifier cookie was missing(测试参数导致),但正常认证流程仍返回404 - 日志存在
[auth][warn][env-url-basepath-redundant]警告,未手动设置authConfig.basePath
解决方案
1. 修正AUTH_URL环境变量配置
AUTH_URL无需包含/api/auth后缀,仅需填写应用根域名即可,示例:
AUTH_URL=https://my-application.azurewebsites.net
next-auth v5会自动拼接/api/auth路径,多余后缀会触发env-url-basepath-redundant警告,同时可能导致回调路径解析错误。
2. 检查Azure App Service路由配置
Azure App Service默认可能无法正确处理Next.js动态API路由,需根据部署类型调整:
- Windows部署:修改
web.config,添加规则确保/api/*路径被Next.js处理:<rule name="Next.js API Routes" stopProcessing="true"> <match url="^api/(.*)" /> <action type="Rewrite" url="/api/{R:1}" /> </rule> - Linux部署:确认启动命令为
npm run start(生产环境需运行构建后代码,而非npm run dev)。
3. 验证回调URL一致性
确保auth.config.ts(或对应配置文件)中Microsoft Entra ID的回调URL,与Azure Portal中注册应用的回调URL完全匹配,格式应为:https://my-application.azurewebsites.net/api/auth/callback/microsoft-entra-id
注意协议、域名、路径需完全一致,无多余斜杠或后缀。
4. 清除浏览器缓存与Cookie
Azure部署后可能残留本地环境的旧Cookie(如code_verifier)导致冲突,清除浏览器缓存及相关Cookie后重新测试认证流程。
5. 确认Next.js构建产物
部署前需执行npm run build,并确保构建产物完整上传至Azure App Service。可通过Azure门户Deployment Center查看部署日志,确认构建过程无错误。
内容的提问来源于stack exchange,提问作者user25140135

