使用 Express-jwt 实现认证和授权

阅读时长 4 分钟读完

Express-jwt 是一个 Node.js 的 npm 包,可以方便地实现基于 JSON Web Token (JWT) 的身份验证和授权。在本篇文章中,我们将深入了解具体如何使用 Express-jwt 来保护你的前端应用程序。

JWT 概述

JSON Web Token(简称 JWT)是一种开放标准(RFC 7519),用于在各方之间作为 JSON 对象安全地传输信息。它可以通过数字签名来验证数据的完整性,并且同时还可以使用密钥加密数据。JWT 由三个部分组成:头部、载荷和签名。

头部

JWT 头部通常由两部分组成:令牌的类型(即 JWT),以及所使用的签名算法(例如 HMAC SHA256 或 RSA)。例如:

载荷

JWT 载荷包含有关用户或其他对象的信息。它可以包含任意数量的声明,这些声明用于描述有关实体(通常是用户)的信息,以及其他元数据。例如:

其中 sub 表示主题,iat 表示令牌发放时间(以秒为单位),name 表示用户名等。

签名

签名通常使用头部中指定的算法和密钥对头部和载荷进行加密,以便验证令牌没有被篡改。例如:

Express-jwt 实现认证和授权

Express-jwt 是一个 Node.js 的 npm 包,可以方便地实现基于 JWT 的身份验证和授权。下面是具体步骤:

  1. 安装依赖

    可以使用 npm 或 yarn 安装 express-jwt:

  2. 添加路由保护

    在需要保护的路由处添加 express-jwt 中间件即可。例如:

    -- -------------------- ---- -------
    ----- ------- - -------------------
    ----- --- - -----------------------
    ----- --- - ----------
    
    -- -- --- ----- ---- --
    --------------- ----- ------- ------------- ----
    
    -- ---------- -------- -------
    ------------------------- ----- ---- -- -
      -- -------- -------------
      ----------
        -------- ------- ------------------
      ---
    ---
  3. 生成和验证 JWT

    在登录时,服务端可以生成一个 JWT 并发送给客户端。在客户端发起请求时,将 JWT 添加到请求头中,服务端会通过验证 JWT 来确认用户的身份。例如:

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

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

纠错
反馈