如何在Next.js中实现身份验证

我是Next.js的新手,并且正在尝试使用jwt令牌进行身份验证系统。我想知道什么是最好的/标准的方法来存储jwt令牌和使用身份验证系统进行路由。我一直在尝试来自不同教程/文章的不同方法,但不太了解。这是我尝试过的。

  1. 当用户登录时,它将用户名/密码发送到单独的 api服务器(例如,处理后端内容的新项目),该服务器将以响应access-token,然后在Next.js项目中,我使用接收到的令牌设置cookie。在Next.js项目中,受保护的路由将用withAuth临时文件包装,它将检查cookie中的令牌。这种方法的问题在于,它容易受到XSS的攻击,因为cookie没有httpOnly标志。

  2. 这类似于1.),但是使用时localStorageaccess-token无法在第一次请求时将问题发送到服务器。(我不确定这个,但是据我理解,在每个http请求中,我必须access-token手动粘贴,所以我无法控制的请求呢?例如第一个请求或使用<a>标签)。

  3. 我在Next.js服务器(自定义快递服务器)中编写了身份验证后端。当用户登录时,服务器将对其进行验证,然后设置一个httpOnly cookie。然后问题是,利用客户端路由(使用Next.js路由器转到url),它无法检查令牌。例如,如果页面被withAuthhoc 包裹,但是它无法使用javascript访问cookie内的令牌。

我已经看到很多人处于getInitialProps受保护的路线中,他们只检查cookie / localStorage中的存在令牌,然后,如果该令牌被吊销或列入黑名单,该怎么办,因为他们没有将令牌发送给服务器?还是在每次客户端页面更改时都必须将令牌发送到服务器?

斯丁前端2020/03/20 13:06:40

随着Next.JS v8的引入,在NextJS示例页面中还放置了一些示例遵循的基本思想是:

智威汤逊

  • 使用Cookie存储令牌(您可以选择是否进一步加密令牌)
  • 发送cookie作为授权标头

OAuth

  • 使用第三方身份验证服务,例如OAuth2.0
  • 使用护照