在前端领域,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 有很多优点,这里简单介绍几点:
安全性高:JWT 可以使用密钥签名,确保在传输过程中不会被篡改。
缩短请求时间:在使用 JWT 进行身份验证时,不需要向数据库发出请求,因此可以减小数据库的负载,提升系统性能。
可扩展性强:JWT 可以自定义负载,携带更多有用的信息。
无状态:JWT 的认证机制使得服务器不必存储任何信息,简化了服务器的实际操作。
使用 JWT 进行认证的实践方法
下面是在 RESTful API 中使用 JWT 进行认证的具体实践方法。
生成 JWT
在生成 JWT 之前,需要先存储用户的信息,这里以 express 应用为例:
const users = [ {id:1, name:"user1", password:"123456"}, {id:2, name:"user2", password:"654321"} ];
下面是生成 JWT 的代码:
-- -------------------- ---- ------- ----- --- - ------------------------ -- -- --- -------- ------------------- - ----- ------- - - ---- -------- ----- --------- -- ----- ----- - ----------------- ----------------- - ---------- ----- --- ------ - ----- -- -
在生成 JWT 的时候,需要指定密钥、有效期等信息。在本例中,生成的 JWT 的有效期是 86400 秒(一天)。
验证 JWT
JWT 在请求 header 中携带,格式如下:
Authorization: Bearer <token>
在接收到请求后,需要先解析 JWT:
-- -------------------- ---- ------- ----- --- - ------------------------ -------- ---------------- ---- ----- - ----- ----- - ------------------------------------ ------ ----------------- ----------------- ------------- -------- - -- ----- - ------ --------------------------------- - -------- - ------------ ------- --- -
如果解析出错,则返回 401,表示错误的 jwtoken。如果解析成功,则将 userID 加入到 req 对象中,以备后续使用。
用 JWT 进行接口保护
在 RESTful API 中,有一些接口是需要进行认证的,只有经过认证的用户才可以访问,下面介绍一下如何使用 JWT 进行接口保护。
-- -------------------- ---- ------- ----------------------------- ------------- ---- - -- -------------- ----- ---- - ------------------------- - ------ --------- --- ------------- -- ------------- --- ------------------ --- -- ------- - ------ -------------------------------------------- - ---- - ----- ----- - -------------------- ---------------- - --- -- --------- --------------------------- ------------ ------------- ---- - ---------------------- ---------- ------------- --- ---
在这里,使用了一个 verifyToken 中间件来确保只有经过身份验证的用户可以访问接口。如果请求头没有带上有效 JWT,则返回 401 无效的 Token。
总结
本文简要介绍了在 RESTful API 中使用 JWT 进行认证的实践方法,JWT 是一种非常优秀的认证方式,它具有安全性高、缩短请求时间、可扩展性强、无状态等优点。在实际开发中,需要根据具体的应用场景,结合实际需求进行具体实践。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6493bd0148841e9894159e84