在开发现代 Web 应用程序时,使用 REST API 已成为标准实践之一。但是,我们需要确保这些 API 访问的是经过授权的用户,而不是恶意攻击者。因此,安全认证在 REST API 开发中扮演着至关重要的角色。在本篇文章中,我们将分享如何在 Deno 应用程序中实现 REST API 安全认证。
什么是 Deno?
Deno 是一种基于 TypeScript 和 V8 引擎的新型运行时环境,它旨在提高 Node.js 的缺点和安全性问题。Deno 由 Node.js 的创始人 Ryan Dahl 致力于开发,它提供了更好的模块化系统、TypeScript 支持、更好的安全性和更高的性能等特性。
实现步骤
我们使用 Deno 来实现 REST API 安全认证。我们需要完成以下任务:
- 编写一个简单的 REST API。
- 创建用户模型和数据库。
- 使用 JSON Web Token(JWT)实现用户认证。
- 将 JWT 令牌发送给客户端。
- 验证每个 API 请求是否具有正确的 JWT 令牌。
让我们逐步完成这些任务。
编写一个简单的 REST API
下面是一个简单的 REST API 示例,该示例将返回从数据库中获取的所有用户列表。
-- -------------------- ---- ------- -- ------ ------ - ------------ ------ - ---- --------------------------------- ----- ------ - --- --------- -- -- -------------------- ----- ----- -- - ----- ----- - - - --- -- ----- ------- -- - --- -- ----- ----- -- - --- -- ----- --------- -- -- ----------------- - ------ --- ----- --- - --- -------------- ------------------------- --------------------------------- ------------------- -- ------- -- ------------------------ ----- ------------ ----- ---- ---
创建用户模型和数据库
我们需要创建用户模型和数据库,以便我们能够在登录之后为每个用户创建 JWT 令牌。在本例中,我们将使用 MySQL 数据库。
CREATE TABLE users ( id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, username VARCHAR(30) NOT NULL, password VARCHAR(128) NOT NULL );
-- -------------------- ---- ------- -- ------ ------ - ------ - ---- ----------------------------------- -- ----- ----- ------ - ----- --- ------------------ --------- ------------ --------- ------- --------- --- --- ------- --- --------- ---- - --- ------- --------- ------- --------- ------- - -- ------ ----- -------- -------------- --------------- - ----- ------ - ----- -------------------- - ---- -------- ------ ----------- -- ------- - -- --------- ----- -------- --------------------------- -------- ------------ - ---------- - ----- ------ - ----- -------------------- - ---- ----- ----- -------- - --- - --------- --- -- -------------------- - ------ -------------- -- ----- - ------ ---------- - -- ---- -- ---- ----- -------- --------------- -------- ------------ - ---------- - ----- ------ - ----- -------------------- - ---- ----- ----- -- - --- ------ -- -------------------- - ------ -------------- -- ----- - ------ ---------- -
使用 JWT 实现用户认证
JWT 是一种用于 Web 应用程序中进行用户认证的标准。我们可以使用第三方 JWT 库 jsonwebtoken 实现 JWT 令牌的生成和验证。
-- -------------------- ---- ------- -- ------ ------ - -- ------ ---- ------------------------------------ ------ --- ---- ------------------------------------- ------ ----------- ---- --------------------------------------- --------- --------- - --------- ------- --------- ------- - -- -- --- -- ----- -------- ----------------- ----- - ----- ----- - ----- ---- - --- -------- --------- ------------- -- --------- ------- -- ------ ------ - -- -- --- -- ----- -------- ------------------ ------- - ----- ------ - ----- ------------------ --------- - ----------- ----- --- ------ ------- - -- ---- --------------------- ----- ----- -- - ----- --------- - ----- ------------------------ -- ---------- ----- ---- - ----- -------------------------------------- -- ------- - ------------------- - ---- ----------------- - - -------- -------- ----- ------------- -- ------- - ----- ------- - ----- ---------------------------------- --------------- -- ---------- - ------------------- - ---- ----------------- - - -------- -------- ----- ------------- -- ------- - ----- ----- - ----- ------------------ ----------------- - - ----- -- ---
将 JWT 令牌发送给客户端
我们使用以下代码将 JWT 令牌发送给客户端。
-- -------------------- ---- ------- -- ------ ------ - ------- - ---- --------------------------------- -- --------- ----- -------- -------------- -------- ----- --------- - ----- --------- - -------------------------------------------------------------- ---- -- ------------ - ------------------- - ---- ----------------- - - -------- ---- ---- -- -- ------------- -- ------ ---- ------- -- ------- - ----- ------ - ----- ----------------------- -- --------- - ------------------- - ---- ----------------- - - -------- -------- -------------- ------- -- ------- - -------------- - --------------- ----- ------- - -- ------ ---------------------- ---------- ----- ----- -- - ----- ---- - ----- ------------------------------- ----------------- - ----- ---
验证每个 API 请求是否具有正确的 JWT 令牌
我们已经可以为每个用户创建 JWT 令牌并将其发送给客户端。在客户端收到该令牌后,我们需要验证每个 API 请求是否具有正确的 JWT 令牌。
-- -------------------- ---- ------- -- ------ ------ - ------------ ------ - ---- --------------------------------- -- --------- ----- -------- -------------- -------- ----- --------- - ----- --------- - -------------------------------------------------------------- ---- -- ------------ - ------------------- - ---- ----------------- - - -------- ---- ---- -- -- ------------- -- ------ ---- ------- -- ------- - ----- ------ - ----- ----------------------- -- --------- - ------------------- - ---- ----------------- - - -------- -------- -------------- ------- -- ------- - -------------- - --------------- ----- ------- - -- -- ----- ------ - --- --------- -------------------- ---------- ----- ----- -- - ----- ----- - ----- -------------- ----------------- - ------ --- ----- --- - --- -------------- ------------------------- --------------------------------- ------------------- -- ------- -- ------------------------ ----- ------------ ----- ---- ---
总结
本文介绍了如何在 Deno 应用程序中实现 REST API 安全认证。我们使用 MySQL 数据库来存储用户信息,使用 bcrypt 加密密码,并使用 JWT 实现用户认证。在每个 API 请求上,我们都验证了 JWT 令牌的有效性,并为受授权的用户提供了访问资源的权限。希望这篇文章对您有所帮助!
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64c8c2c95ad90b6d04149dc2