Next.js 前端和 NestJS 后端之间的身份验证

Léo*_*uez 5 authentication node.js express jwt reactjs

问题

\n

我需要向 Node.js 应用程序添加身份验证,但我对身份验证一无所知。

\n

我的要求是:

\n
    \n
  • 我需要能够在后端验证身份验证,并在我的 PostgreSQL 数据库中找到关联的用户
  • \n
  • 我希望这个解决方案足够安全,能够通过渗透测试/SOC 2 合规性
  • \n
  • 我需要能够添加身份验证提供商,例如 Google 和 Salesforce
  • \n
  • 我希望这很容易。我不想自己实现与选项卡之间共享令牌等相关的复杂内容。
  • \n
  • 理想情况下,我希望所有 API 路由仅位于 NestJS 应用程序中,而不是位于 Next.js 中,以便仅保留一台节点服务器并简化我的部署
  • \n
\n

语境

\n

我的项目是一个 Nx monorepo,具有以下结构(NestJS 用于后端,Next.js 用于前端):

\n
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 apps\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 backend      # NestJS backend\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 frontend     # Next.js frontend\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 dist\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 apps\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 libs\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 node_modules\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 README.md\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 nx.json\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 package.json\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 tsconfig.base.json\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 workspace.json\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 yarn.lock\n
Run Code Online (Sandbox Code Playgroud)\n

个人研究

\n

我找到了后端的 Passport.js 和前端的 NextAuth.js。他们似乎为我处理了大部分艰苦的工作。我找到了一种让它们协同工作的方法:在前端从 Google 获取 JWT 令牌,将此令牌发送到我的服务器,服务器验证令牌并发送新令牌,将新令牌发送到前端并使用它来验证以下请求(https://arunoda.me/blog/add-auth-support-to-a-next-js-app-with-a-custom-backend)。

\n

但是,如果我使用 NextAuth.js,它会强制您在 Next.js 中定义 API 路由,因此我最终会得到两个节点服务器,这将更加难以部署。

\n