在现代的 Web 应用中,权限控制是一个必不可少的功能。本文将介绍如何在 Express.js 应用中使用 JWT(JSON Web Token)来实现权限控制。
什么是 JWT?
JWT 是一种用于在各方之间安全传输信息的开放标准。它可以在身份验证和信息交换方面发挥重要作用。JWT 可以使用 HMAC 算法或者 RSA 的公私秘钥对进行签名。有三个部分组成:头部、载荷和签名。其中头部和载荷是 JSON 格式的键值对,签名是使用加密算法生成的字符串。
为什么使用 JWT?
在传统的会话管理中,用户在登录之后会在服务端创建一个会话,会话 ID 保存在 Cookie 中。这种方式存在一些问题:首先,它需要使用 Cookie,而对于一些前后端分离的应用,Cookie 可能无法满足需求;其次,服务端需要保存状态,增加了服务器的复杂度;最后,服务端可能需要在多个机器之间共享状态。
JWT 可以解决这些问题:首先,它可以在无 Cookie 的情况下通过 HTTP 头部传输 Token;其次,它是无状态的,服务器不需要保存任何状态;最后,它可以很容易地在多个机器之间共享。
在 Express.js 中使用 JWT
在 Express.js 中使用 JWT 需要使用 jsonwebtoken 库。我们首先需要安装该库:
npm install jsonwebtoken --save
接下来,我们来看一个例子。
-- -------------------- ---- ------- ----- ------- - ------------------- ----- --- - ------------------------ ----- --- - ---------- ----------------- ----- ---- -- - ----- ---- - - --------- -------- --------- --------- -- -- --------------------- --- ------------- -- ------------------ --- --------------- - ------ ---------------------- ------ --------------- --- - ----- ----- - ---------- --------- -------------- -- ----------- - ---------- ----- --- ------ ---------- ------ --- --- ----------------- ----- ---- -- - ----- ----- - --------------------------------------------- ---- --- - ----- ------- - ----------------- ------------ ------ ---------- -------- ------- ---------------------- --- - ----- --- - ------ ---------------------- ------ --------------- --- - --- ---------------- -- -- - ---------------------- -- ---- ------- ---
在 /login
API 中,我们通过查询参数获取用户名和密码。如果用户名和密码不正确,返回 401 错误。否则,我们使用 jwt.sign()
方法来生成一个 Token,并将其返回给客户端。
在 /hello
API 中,我们首先从 HTTP 头部获取 Authorization 字段,去掉 Bearer 前缀后得到 Token。然后我们使用 jwt.verify()
方法来验证 Token 是否合法,如果合法则返回用户信息。如果 Token 不合法,返回 401 错误。
这里的密钥 mysecret
应该放在环境变量中,而不是直接写在代码中。
总结
本文介绍了 JWT 的基本概念和在 Express.js 中的使用。使用 JWT 可以让我们更方便地实现无状态的权限控制,减轻后端服务器的负担,同时也可以提高安全性。在实际使用中,我们应该注意避免将敏感的信息存储在 JWT 中,并确保密钥的安全。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64e0b623f6b2d6eab3bed37c