Next-Auth集成LinkedIn认证报错:OPError: 预期200 OK,得到403 Forbidden
Next.js 13 App Router + Next-Auth LinkedIn认证回调403 Forbidden解决办法
先查LinkedIn应用的回调URL配置
403大概率是这里出问题:- 确保LinkedIn后台「OAuth 2.0设置」里的回调URL,和你Next-Auth里的
callbackUrl完全一致,包括http/https、端口号(本地开发要带:3000) - 格式必须是
http://localhost:3000/api/auth/callback/linkedin(本地)或你的生产域名加后面的路径 - 别漏加这个URL到LinkedIn的允许列表里
- 确保LinkedIn后台「OAuth 2.0设置」里的回调URL,和你Next-Auth里的
检查LinkedIn应用的权限和状态
- 如果应用还在「开发中」状态,只有你添加到「测试者」列表的LinkedIn账号才能正常授权,其他账号会被拦截
- 确认你用的scope已经在LinkedIn后台获批,敏感scope需要人工审核,没通过的话调用会403
手动指定LinkedIn Provider的端点
试试覆盖Next-Auth默认的LinkedIn端点配置,避免默认值可能的问题:import LinkedInProvider from "next-auth/providers/linkedin"; export const authOptions = { providers: [ LinkedInProvider({ clientId: process.env.LINKEDIN_CLIENT_ID, clientSecret: process.env.LINKEDIN_CLIENT_SECRET, authorization: { url: "https://www.linkedin.com/oauth/v2/authorization", params: { scope: "openid profile email", // 填你已获批的scope response_type: "code", }, }, token: { url: "https://www.linkedin.com/oauth/v2/accessToken" }, userinfo: { url: "https://api.linkedin.com/v2/userinfo" }, }), ], // 其他auth配置... };核对环境变量和服务器配置
- 检查
LINKEDIN_CLIENT_ID、LINKEDIN_CLIENT_SECRET有没有拼写错误、多余空格,确保和LinkedIn后台完全一致 - 本地开发时
NEXTAUTH_URL设为http://localhost:3000,生产环境设为你的域名,别写错 - 生产环境确认服务器没拦截LinkedIn的回调请求,CORS配置允许LinkedIn的域名访问
- 检查
内容的提问来源于stack exchange,提问作者Shakeel Zain
相关产品推荐
相关产品推荐

