Express.js 中使用 JWT 实现身份认证的细节和注意事项

阅读时长 5 分钟读完

引言

在今天的前端开发中,身份认证是非常重要的一环。常用的身份认证方式有Cookie、Session和Token。而在这些身份认证方式中,Token认证方式的应用越来越广泛,其中一种Token认证方式就是JWT。这篇文章将介绍如何在Express.js中使用JWT实现身份认证以及需要注意的细节和注意事项。

JWT简介

JWT,全称Json Web Token,是一种开放标准(RFC 7519)的身份认证协议。它是一种特殊的Token,由三部分组成:Header、Payload和Signature。Header部分用于声明Token的类型以及所使用的算法,Payload部分用于存储用户信息而不是敏感数据,Signature部分则是基于Base64URL的哈希算法生成的一串字符串,用于保证Token的可靠性。

JWT不需要在服务端存储,且可以通过客户端携带Token进行访问,这也成为JWT的一个优势。

在Express.js中使用JWT

安装依赖

在使用JWT之前,我们需要先安装jsonwebtoken依赖包。

生成Token

首先,我们需要在接口中生成Token,具体实现如下:

-- -------------------- ---- -------
----- --- - ------------------------

------------------ ----- ---- -- -
  ----- - --------- -------- - - ---------

  -- ------------------
  -- ---

  -- -------
  ----- ----- - ----------
    --------
  -- --------- - ---------- ---- ---

  ----------
    ----- ----
    -------- -------
    -----
  ---
---
展开代码

在上面的代码中,我们为用户生成了一个包含用户名信息的Token,并设置了过期时间为1小时。secret是用于哈希Token的秘钥,可以根据实际需要设置。

验证Token

在接口中我们还需要验证Token,保证用户信息是可靠的。我们可以在所有需要验证Token的接口中加上Token的验证函数middleware,具体实现如下:

-- -------------------- ---- -------
----- --- - ------------------------

-- ---------
----- ----------- - ----- ---- ----- -- -
  ----- ------------ - --------------------------
  -- ------- ------------ --- ------------ -
    -- ------------- ------- --------
    ----- ----- - -------------------- ------

    ----------------- --------- ----- -------- -- -
      -- ----- -
        -- ----
        --------------------
      - ---- -
        -------- - --------
        -------
      -
    ---
  - ---- -
    --------------------
  -
--

-- ------------
------------------- ------------ ----- ---- -- -
  ----------
    ----- ----
    -------- -------
    ----- --------
  ---
---
展开代码

在上面的代码中,我们首先判断Token是否存在,如果存在,我们通过jwt.verify()函数对Token进行验证。验证成功后,我们将解密后的Token信息存储在req.user中,后续的业务逻辑就可以使用req.user中的信息进行操作。

细节和注意事项

Token过期

Token是有过期时间的,在使用时需要注意Token过期的情况。一般情况下,我们在生成Token时就需要设置Token的过期时间,而在验证Token时,我们需要先验证Token是否过期,如果过期则需要让用户重新登录。

-- -------------------- ---- -------
----------------- --------- ----- -------- -- -
  -- ----- -
    -- ------------
    -- --------- --- -------------------- -
      ----------------------
        ----- ----
        -------- ----------------
      ---
    - ---- -
      --------------------
    -
  - ---- -
    -------- - --------
    -------
  -
---
展开代码

Token安全性

Token中包含用户信息,因此需要保证Token的安全性,避免Token泄露。可以考虑以下几个方面:

  • 设置Token的过期时间
  • 设置Token的秘钥,秘钥长度应该足够长,使用随机生成的字符串或者加密算法生成的哈希值
  • Token不应该被存储在客户端或者浏览器的localStorage或sessionStorage中

Token的刷新和撤销

在某些特殊场景下,我们需要对Token进行刷新或撤销操作,以提高应用的安全性。比如用户修改密码后,需要撤销之前生成的Token,让用户重新登录。这时我们可以在Token中携带一个key(比如jti),代表Token的唯一ID,依靠这个ID来撤销或刷新Token。

结语

本文介绍了在Express.js中使用JWT实现身份认证的细节和注意事项。通过使用JWT,我们可以方便地进行身份认证,实现Token安全、易用的身份认证方案。在使用JWT时,需要特别关注Token的安全性问题,以保护用户信息的安全。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67c3b211314edc2684dc6ddc

纠错
反馈

纠错反馈

程序员教程

精选优质教程,助你快速提升技术实力

程序员面试题库

海量优质面试题,助你轻松应对技术面试