RESTful API 中的 JSON Web Token 认证实践

阅读时长 5 分钟读完

在前端领域,RESTful API 已经成为了构建现代 Web 应用程序的主要方式。而在基于 RESTful API 构建的应用中,安全认证是必不可少的一部分。而 JSON Web Token (JWT) 是一种优秀的认证方式,它是一种在网络应用间传递信息的标准方法,可以在用户和服务器之间安全地传输信息。本文将详细介绍在 RESTful API 中使用 JWT 进行认证的实践方法。

什么是 JWT?

JWT 的全称是 JSON Web Token,是一种用于在网络应用间传递信息的标准方法,是一种被广泛使用的跨域身份验证解决方案。它可以安全地将信息作为 JSON 对象传输,因此它可以通过 URL、HTTP POST 或 HTTP Header 传输,并且非常适合在移动端和 Web 应用中使用。

JWT 由三部分组成:头部、负载和签名,它们都是 base64Url 编码的字符串,中间用英文句点隔开。头部通常由两部分构成:token 的类型,即 JWT,以及所使用的算法,例如 HMAC SHA256 或 RSA。负载(Payload)包含了要传输的信息,它由一些声明和实际的数据构成,声明包含了该JWT的元数据,比如签发者、过期时间等。签名是对前两部分的签名,确保这个JWT是可信的,它需要使用应用程序中的密钥进行签名。

JWT 的优点

JWT 有很多优点,这里简单介绍几点:

  1. 安全性高:JWT 可以使用密钥签名,确保在传输过程中不会被篡改。

  2. 缩短请求时间:在使用 JWT 进行身份验证时,不需要向数据库发出请求,因此可以减小数据库的负载,提升系统性能。

  3. 可扩展性强:JWT 可以自定义负载,携带更多有用的信息。

  4. 无状态:JWT 的认证机制使得服务器不必存储任何信息,简化了服务器的实际操作。

使用 JWT 进行认证的实践方法

下面是在 RESTful API 中使用 JWT 进行认证的具体实践方法。

生成 JWT

在生成 JWT 之前,需要先存储用户的信息,这里以 express 应用为例:

下面是生成 JWT 的代码:

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

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

在生成 JWT 的时候,需要指定密钥、有效期等信息。在本例中,生成的 JWT 的有效期是 86400 秒(一天)。

验证 JWT

JWT 在请求 header 中携带,格式如下:

在接收到请求后,需要先解析 JWT:

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

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

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

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

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

如果解析出错,则返回 401,表示错误的 jwtoken。如果解析成功,则将 userID 加入到 req 对象中,以备后续使用。

用 JWT 进行接口保护

在 RESTful API 中,有一些接口是需要进行认证的,只有经过认证的用户才可以访问,下面介绍一下如何使用 JWT 进行接口保护。

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

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

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

在这里,使用了一个 verifyToken 中间件来确保只有经过身份验证的用户可以访问接口。如果请求头没有带上有效 JWT,则返回 401 无效的 Token。

总结

本文简要介绍了在 RESTful API 中使用 JWT 进行认证的实践方法,JWT 是一种非常优秀的认证方式,它具有安全性高、缩短请求时间、可扩展性强、无状态等优点。在实际开发中,需要根据具体的应用场景,结合实际需求进行具体实践。

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

纠错
反馈