随着 Deno 的不断发展,越来越多的开发者开始使用它来构建后端服务。在这些服务中,身份验证被认为是最基本的需求之一。其中,JWT Authentication 往往是一种常见的身份认证方式。那么,在 Deno 中如何使用 JWT Authentication 呢?本文将为你详细介绍。
什么是 JWT Authentication?
JWT (JSON Web Token) 是一种用于身份验证的标准,可以在我们和客户端之间安全地传递数据。它由三部分组成:头部、载荷和签名。在使用 JWT Authentication 时,用户提供一些凭据(例如用户名和密码),服务器验证这些凭据是否正确并签发一个 JWT。以后,客户端将使用这个 JWT 来访问受保护的端点。服务器会验证这个 JWT,以确定客户端是否有权访问资源。
Deno 中的 JWT Authentication
要在 Deno 中使用 JWT Authentication,我们需要一些支持。在本文中,我们使用如下三个 Mod:
- oak:koa 的一个封装,用于创建 Web Server
- jwt:从 Deno 核心使用 JWT 的库
- bcrypt:密码散列化库,用于将密码加密
安装 Mod
我们可以使用 deno.land 安装 oak、jwt 和 bcrypt。为了安装这些 Mod,我们需要在命令行中运行以下代码:
deno install --allow-read --allow-net --unstable https://deno.land/x/oak/mod.ts deno install --allow-read --allow-write --unstable https://deno.land/x/bcrypt/mod.ts deno install --allow-read --allow-net --unstable https://deno.land/x/djwt/mod.ts
我们必须传递 --allow-read
,--allow-write
,--allow-net
等选项来授权这些 Mod 执行它们需要的操作。
实现 JWT Authentication
- 设置一些环境变量
在这个示例中,我们将从环境变量中获取一些敏感信息,例如数据库地址和 JWT 密钥。因此,我们需要在 .env
文件中设置这些信息。你可以使用以下代码作为示例:
DB_URL=mongodb://user:password@localhost:27017/mydb JWT_KEY=mysecret
- 构建 Express App
我们使用 oak 来创建 Server。我们定义路由、中间件,这些中间件将验证 JWT 和保护受保护的端点。我们将所有内容存储在 main.ts 文件中。
-- -------------------- ---- ------- ------ - ------------ ------ - ---- --------------------------------- ------ - ----- ------- - ---- ------------------------------------ ------ - -------- ------------- - ---- ------------------------------------- ------ - ----------- - ---- --------------------------------------- ------ ------------------------------------- ----- --- - --- -------------- ----- ------ - --- --------- -- --- ------------- ---------- ----- ------------ - ----- ---------- ------- -- - ----- ---- - ----- ------------------- ------ ----- --------------------- ------ -- -- ------- ----- ---------- - ------ ---- -- - ----- ------- - - ---- ------------ ---- ----------------- ---------------- - ---------- ----- ---------- ------ ----------- -- ----- ------ - - ---- -------- ---- ------ -- ----- --- - --------- ------- -------- ---- ----------------------- -- -- --- -- ------ - ----- --- ------------- -- ------ ------ - ------ ---- -- -- --------- --- ----- -------------- - ----- ----- ---- ----- ---- -- - --- - ----- --- - ---------------------------------------- -- --- ----- --------------- --- - ----- ---------------- ----------------------- -- --- - ----------- ----- --- -- ---------------- -- ------------------------ - ------------------- - ---- ----------------- - - -------- -------------- -- ------- - ----- ------- - ----- ----- - ------------------- - ---- ----------------- - - -------- -------------- -- ------- - -- -- ---- -------------------- ----- ----- ---- -- - ----- - ----- ------ -------- - - ----- ------------------------- ----- -------------- - ----- ----------------------- ----- ---------------------------------- ----- ------ --------- -------------- --- ----- --- - ------------ ----- ----- --- ----------------- - - --- -- --- -- -- --------------------- ----- ----- ---- -- - ----- - ------ -------- - - ----- ------------------------- ----- ---- - ----- -------------------------------- ----- --- -- ------ -- ------- ----------------- ---------------- - ------------------- - ---- ----------------- - - -------- -------- ----- ------------ -- ------- - ----- --- - ----------------- ----------------- - - --- -- --- -- -------- ------------------------- --------------- ----- ----- ---- -- - ----------------- - - -------- ------- -------- - --------- --------- -- --- -- ----------------- ------------------------- --------------------------------- -- --------- ----- --------------------------------- -- ---- ---------------------- -- ---------- -- ---- ----- ---- - ----- ------------------- -- --------- -- ---- ---------- ----- ------------ ---- ---
在这里,我们使用 bcrypt-sha256 可变算法来生成密码哈希。我们使用 makeJwt() 函数和 Deno.env.get() 来构建和签发 JWT。当访问受保护的端点时,我们使用 authMiddleware() 中间件来验证 JWT。如果 JWT 值无效或已过期,则上下文的响应代码将为 401。
结论
在本文中,我们介绍了如何在 Deno 中使用 JWT Authentication。我们使用了一些流行的库,例如 oak、bcrypt、djwt 等。我们创建了一个 Express 应用程序,通过路由和中间件进行身份验证。我希望这篇文章可以帮助你更好地理解 JWT Authentication,并在 Deno 中快速实现它。
参考资料
- https://jwt.io/introduction/
- https://deno.land/x/oak
- https://deno.land/x/bcrypt
- https://deno.land/x/djwt
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/66f26e49a44b36ee5765ea80