【发布时间】:2022-02-09 18:55:21
【问题描述】:
目前我有一个与我的 create-react-app 项目配合使用的现有 Node.js 后端。
我正在迁移到 NextJS,但有一些问题。
我有一个简单的 JWT 认证流程:
- 前端向
my-server/api/auth发出请求 - 后端对用户进行身份验证,将刷新令牌作为
httpOnlycookie 添加到响应头。并返回访问令牌作为响应正文。 - 下一次对服务器的调用将在 cookie 中包含访问令牌和刷新令牌。
我的问题是,如果我的 NextJS 应用程序部署到 vercel 域:www.my-nextjs-app.vercel.com,正在向部署到 www.my-backend-app.aws.com 的 aws 的后端应用程序发出请求,那么我的后端设置的 cookie 将不会应用因为 CORS(因为他们考虑了来自不同域的第三方 cookie)。
(如果我在 localhost:3000 本地服务器我的 create-react-app 并在 localhost:5000 向我的本地服务器发出请求也是如此,chrome 不会显示 httpOnly cookie,因为它来自不同的域)
这与我的 create-react-app 不同,后者直接从我的后端在同一域中提供,因此没有第三方 cookie 的问题。
有解决办法吗?
编辑:另外,Next.JS 真的要与现有服务器一起使用吗?或仅无服务器
【问题讨论】:
-
您的问题遗漏了很多重要的细节。您是否为 OAuth 使用 PKCE 授权代码流?在这种情况下,您可能无法使用 next.js 作为替代品。然而,在这些情况下可以使用 OAuth - 这里有一个这样做的指南:auth0.com/blog/ultimate-guide-nextjs-authentication-auth0
-
我有两个使用谷歌的 OAuth,和一个简单的电子邮件+密码身份验证
-
忘记我之前的评论。您的 OAuth 实现依赖于 httpOnly cookie,您已经非常正确地指出它不能跨域。最简单的解决方案可能是使用 DNS(即 CNAME)为您的 vercel 部署提供有效域。
标签: javascript node.js cookies next.js cross-domain