如何使用 JSON Web Token 管理 RESTful API 认证授权

JSON Web Token(JWT)是有关身份认证和授权的流行标准。它主要在客户端和服务器之间传递信息,并用于身份验证和授权。本文将介绍如何使用 JWT 进行 RESTful API 认证授权,并提供完整的示例代码以及详细的学习和指导。

什么是 JWT?

JWT 是一种开放标准(RFC 7519),它定义了一种紧凑且自包含的方式来传输信息,这些信息可以被验证和信任。JWT 由三部分组成:头部、载荷和签名。头部包含用于识别 JWT 类型的元数据,载荷包含实际传输的用户数据,签名则用于验证 JWT 的完整性。

如何实现 JWT 认证授权?

使用 JWT 进行身份认证和授权分为以下几个步骤:

1. 用户登录

当用户使用他们的用户名和密码登录应用程序时,应用程序将验证凭据,如果凭证有效,将生成 JWT 并发送回客户端。JWT 中包含一些用户数据,例如用户 ID 和用户名。以下代码演示了登录过程:

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

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

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

2. 发送 JWT

在用户登录后,应用程序将 JWT 存储在客户端,通常存储在浏览器的本地存储或 cookie 中。每次向 RESTful API 发送请求时,客户端会将 JWT 包含在请求的头部(Authorization Bearer)中:

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

3. 验证 JWT

在 RESTful API 接收到请求时,需要验证 JWT 的有效性。这通常可以通过使用特定于后端框架的中间件来完成。以下示例代码演示如何在 Express.js 中使用中间件验证 JWT:

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

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

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

4. 授权

验证 JWT 后,您可以使用包含在 JWT 载荷中的用户数据来授权用户执行特定操作。例如,以下代码演示了如何检查是否具有“admin”角色:

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

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

结论

使用 JWT 进行身份验证和授权是 RESTful API 的一种流行方法。在此文中,我们介绍了如何使用 JWT 在 RESTful API 中进行身份验证和授权。 您可以通过阅读 RFC 7519 和查看特定于您的后端框架的文档来进一步了解 JWT。

完整示例代码:https://github.com/jwt/examples/tree/master/nodejs-express

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