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

问题描述

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

本质上,我正在采取的步骤是:

  1. 用户访问 Next.JS 服务页面。
  2. 用户点击“使用 facebook 登录”,然后一个请求被发送到我的 Koa 服务器 /auth/facebook
  3. 发生带有护照的 OAuth,并为用户生成和存储令牌(然后创建或更新)
  4. 生成一个非常短暂的令牌,并且用户将使用 URL 中的短暂令牌重定向到 Next.JS 应用程序。
  5. Next.JS 将这个短暂的令牌发送到 Koa API,并返回一个真正的访问令牌并将其存储在 cookie 中。
  6. 这个新的访问令牌用于对 API 的后续请求。

这感觉非常复杂,我觉得有可能完全删除短暂的令牌步骤。

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

我是否过于复杂了?有没有我没有看到的更简单的方法?

标签: oauthpassport.jskoanext.js

解决方案


经过一番摆弄后,我将其缩减为仅几个请求。

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


推荐阅读