RESTful API 中的 JSON Web Token(JWT)认证与授权

什么是 JWT

JWT(JSON Web Token)是由 JSON 组成的开放标准(RFC 7519),用于在各方之间传递安全可靠的信息。一个 JWT 由三部分组成:Header(头部)、Payload(负载)和 Signature(签名)。

  • Header: 存放算法和签名所需的参数。
  • Payload: 存放 JWT 的实际内容,可以存放用户的信息和其他自定义信息。
  • Signature: 通过 Header、Payload 和 Secret(密钥)生成,用于验证 JWT 是否为有效的、未被篡改的 Token。

JWT 的优势在于,它不需要在服务端存储会话信息,只需将必要信息存储在 Token 中,每次都将 Token 作为 HTTP Header 的一部分发送到服务器端,无需专门的存储、传输和解析会话信息,从而降低了服务器的负担。

JWT 的认证与授权

在 RESTful API 中,JWT 可以用来认证和授权用户的请求。当用户登录时,服务器生成 JWT 并返回给客户端,客户端在后续请求中将 JWT 作为请求头传递到服务器端,服务器验证 JWT 是否有效,如果有效则允许用户访问相应的资源。以下是 JWT 的认证和授权过程:

  1. 用户在客户端输入用户名和密码进行登录。
  2. 服务器验证用户的信息,如果成功登录,则生成 JWT。
  3. 服务器将 JWT 发送给客户端,客户端将 JWT 存储在本地。
  4. 在后续请求中,客户端将 JWT 作为请求头传递给服务器。
  5. 服务器验证 JWT 的有效性,如果有效,则允许用户访问相应的资源。

JWT 的配置与安全性

  • Secret(密钥): JWT 的签名算法需要一个 Secret 作为密钥,用来进行签名和验证。Secret 一旦泄露,会给整个系统带来安全风险,因此需要保护好 Secret。同时,Secret 需要定期更新,确保安全性。
  • 过期时间: JWT 的过期时间决定了 Token 能够被使用的有效期。过期时间过短会导致频繁的登录,过期时间过长会降低安全性。合适的过期时间应该根据具体的应用场景进行权衡和调整。
  • 颁发者和受众: JWT 包含了颁发者(iss)和受众(aud)两个字段作为限制条件,确保 Token 只能被指定的应用场景使用。同时,颁发者可以用于标识 Token 的合法性。
  • 签名算法: JWT 可以使用多种签名算法进行签名和验证,不同的签名算法具有不同的安全性和效率。目前主流的签名算法有:HMAC SHA-256、RSA 和 ECDSA。

示例代码

登录生成 JWT

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

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

验证 JWT

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

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

总结

JWT 是一个简单、安全、可靠的认证和授权方案,在很多应用场景中都可以发挥重要的作用。但同时也需要注意合理的配置和安全性保障,否则可能会带来风险和损失。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/66427516d3423812e405ea7e