JWT (JSON Web Token) 是一种用于身份验证的开放标准,它可以安全地在客户端和服务器之间传递信息,而无需在每个请求时都进行身份验证。Deno 是一个现代的 JavaScript 和 TypeScript 运行时环境,本篇文章将介绍如何在 Deno 中使用 JWT 进行身份验证。
安装依赖
首先,我们需要安装 Deno 以及一个用于生成和验证 JWT 的库,我们可以选择 deno-jwt。
安装 Deno:
$ curl -fsSL https://deno.land/x/install/install.sh | sh
安装 deno-jwt:
$ deno install --allow-read --allow-write --allow-net --name=djwt https://deno.land/x/djwt/cli.ts
生成 JWT
在 Deno 中生成 JWT 很简单,我们只需要使用 deno-jwt 库中的 sign
函数即可。
import { sign } from "https://deno.land/x/djwt/mod.ts"; const payload = { id: 1, username: "example" }; const secret = "my-secret-key"; const header = { alg: "HS256", typ: "JWT" }; const token = await sign({ payload, secret, header }); console.log(token); // eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9.eyJpZCI6IDEsICJ1c2VybmFtZSI6ICJleGFtcGxlIn0.pV7zZE8ZlqF7oaJFH1v-iNIVJN8Uh3qLd2cJ1vG_gKY
上面的代码中,payload
是要包含在 JWT 中的数据,在这个例子中我们设置了 id
和 username
。secret
是用于生成签名的密钥,header
是 JWT 的头部,包含算法和类型。
生成的 JWT 是一个由三部分组成的字符串,它们分别是头部、载荷和签名,用英文句点 .
分隔。在上面的例子中,生成的 JWT 中的载荷部分是:
{ "id": 1, "username": "example" }
验证 JWT
接下来,我们需要编写代码来验证 JWT。我们可以使用 deno-jwt 中的 verify
函数来验证 token。
-- -------------------- ---- ------- ------ - ------ - ---- ---------------------------------- ----- ----- - ------ -- ----- ----- ----- ------ - ---------------- ----- ----- - ----- ------------- ------- --------- -- ------- - -- ----- ---- --------------------------- -- - --- -- --------- --------- - - ---- - -- ----- ---- -------------------- -------- -
在验证 JWT 时,我们需要提供相同的密钥和算法。如果 JWT 是有效的,则验证函数将返回一个对象,其中包含头部和载荷。否则,它将返回一个 null
值。
完整示例
为了让这个示例更完整,我们可以编写一个基本的身份验证系统。
-- -------------------- ---- ------- ------ - ------------ ------ - ---- --------------------------------- ------ - ------ - ---- ---------------------------------- ---- ---- - - --- ------- --------- ------- --------- ------- -- ----- ------ ------ - - - --- -- --------- -------- --------- ----------- -- -- ----- ------ - ---------------- ----- ------ - --- --------- --------------------- ----- ----- -- - ----- - --------- -------- - - ----- ------------------------- ----- ----- ---- - --------- - ----------- --- -- ---------- --- -------- -- ---------- --- -------- -- -- ------- - ------------------- - ---- ----------------- - - -------- -------- ------------ -- ------- - ----- ------- - - --- -------- --------- ------------- -- ----- ----- - ----- ------ -------- ------- ------- - ---- -------- ---- ----- - --- ----------------- - - ----- -- --- ------------------------ ----- ----- -- - ----- ----- - ------------------------------------------------- ------ -- -------- - ------------------- - ---- ----------------- - - -------- -------- ------ -- ------- - ----- ----- - ----- ------------- ------- --------- -- -------- - ------------------- - ---- ----------------- - - -------- -------- ------ -- ------- - ----------------- - - -------- ---- --- -------------- -- --- ----- --- - --- -------------- ------------------------- --------------------------------- ----- ------------ ----- ---- ---
在这个示例中,我们使用了 Deno 自带的 Web 框架 Oak,使用了 deno-jwt 库中的 verify
和 sign
函数。
我们创建了一个 users
数组,其中包含了一个用户的列表,每个用户有一个 id
、一个 username
和一个 password
。当用户登录时,我们会检查提供的凭证是否与列表中的任何一条记录匹配,并生成 JWT 并将其返回。
在 /protected
路由中,我们首先获取用户提交的 Token 并验证它是否有效。如果有效,我们可以让用户访问 /protected
路由,否则我们将返回一个 401
未授权的错误。
结论
在这篇文章中,我们详细介绍了如何使用 deno-jwt 库在 Deno 中生成和验证 JWT。我们还编写了一个基本的身份验证系统作为一个完整的示例。
JWT 是一种非常有用的身份验证方案,它能够在客户端和服务器之间安全地传递信息。我们可以使用 deno-jwt 库来方便地在 Deno 中进行身份验证。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/670b7037d91dce0dc88a977f