这是一种安全的用户身份验证方法吗?如果是这样,是否可以简化以减少请求总数?

Is this a secure method for user authentication? If so, can it be simplified to reduce the total number of requests?

我一直在 Koa 中进行挖掘,并且有一个似乎工作正常的设置。然后我决定 SSR 是有益的,我正在努力创建一种简单的身份验证方法。

本质上我采取的步骤是:

  1. 用户访问 Next.JS 服务页面。
  2. 用户点击 "Login with facebook",一个请求被发送到我位于 /auth/facebook
  3. 的 Koa 服务器
  4. 发生带有通行证的 OAuth,并为用户生成并存储令牌(当时创建或更新)
  5. 生成了一个非常短暂的令牌,用户被重定向到 Next.JS 应用程序,该应用程序在 URL.
  6. 中具有短暂的令牌
  7. Next.JS 将这个短暂的令牌发送到 Koa API 并返回一个真实的访问令牌并存储在 cookie 中。
  8. 此新访问令牌用于对 API 的后续请求。

这感觉非常复杂,我觉得可以完全删除短期令牌步骤。

根据我的阅读,将 Next.JS 用于后端 API 相关逻辑并不是一个好主意,这就是为什么在 Koa-API 上进行身份验证的原因服务器,因此需要传递一个短暂的令牌来获得一个真正的令牌。

我是不是太复杂了?有没有我只是没看到的更简单的方法?

经过一番摆弄,我将其减少到只有几个请求。

我将 Passport.js 移动到自定义 Next.JS 服务器(使用 Koa)并将回调设置为目标 Next。然后我验证每个请求的令牌,因为它现在由 Next.JS 而不是我的 API 服务器存储,删除 4 和 5.