跳至内容

JWT 身份验证助手

此助手提供用于编码、解码、签名和验证 JSON Web 令牌 (JWT) 的函数。JWT 通常用于 Web 应用程序中的身份验证和授权目的。此助手提供强大的 JWT 功能,支持各种加密算法。

导入

要使用此助手,您可以按如下方式导入它

ts
import { decode, sign, verify } from 'hono/jwt'

INFO

JWT 中间件 也会从 hono/jwt 导入 jwt 函数。

sign()

此函数通过使用指定的算法和密钥对有效负载进行编码和签名来生成 JWT 令牌。

ts
sign(
  payload: unknown,
  secret: string,
  alg?: 'HS256';

): Promise<string>;

示例

ts
import { sign } from 'hono/jwt'

const payload = {
  sub: 'user123',
  role: 'admin',
  exp: Math.floor(Date.now() / 1000) + 60 * 5, // Token expires in 5 minutes
}
const secret = 'mySecretKey'
const token = await sign(payload, secret)

选项


必需 payload: unknown

要签名的 JWT 有效负载。您可以在 有效负载验证 中包含其他声明。

必需 secret: string

用于 JWT 验证或签名的密钥。

可选 alg: AlgorithmTypes

用于 JWT 签名或验证的算法。默认值为 HS256。

verify()

此函数检查 JWT 令牌是否真实且仍然有效。它确保令牌没有被更改,并且仅在您添加了 有效负载验证 时才会检查有效性。

ts
verify(
  token: string,
  secret: string,
  alg?: 'HS256';
): Promise<any>;

示例

ts
import { verify } from 'hono/jwt'

const tokenToVerify = 'token'
const secretKey = 'mySecretKey'

const decodedPayload = await verify(tokenToVerify, secretKey)
console.log(decodedPayload)

选项


必需 token: string

要验证的 JWT 令牌。

必需 secret: string

用于 JWT 验证或签名的密钥。

可选 alg: AlgorithmTypes

用于 JWT 签名或验证的算法。默认值为 HS256。

decode()

此函数解码 JWT 令牌,而不执行签名验证。它从令牌中提取并返回头和有效负载。

ts
decode(token: string): { header: any; payload: any };

示例

ts
import { decode } from 'hono/jwt'

// Decode the JWT token
const tokenToDecode =
  'eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9.eyJzdWIiOiAidXNlcjEyMyIsICJyb2xlIjogImFkbWluIn0.JxUwx6Ua1B0D1B0FtCrj72ok5cm1Pkmr_hL82sd7ELA'

const { header, payload } = decode(tokenToDecode)

console.log('Decoded Header:', header)
console.log('Decoded Payload:', payload)

选项


必需 token: string

要解码的 JWT 令牌。

decode 函数允许您检查 JWT 令牌的头和有效负载,而无需 执行验证。这对于调试或从 JWT 令牌中提取信息很有用。

有效负载验证

验证 JWT 令牌时,将执行以下有效负载验证

  • exp:检查令牌以确保它没有过期。
  • nbf:检查令牌以确保它没有在指定时间之前使用。
  • iat:检查令牌以确保它没有在将来发出。

如果您打算在验证期间执行这些检查,请确保您的 JWT 有效负载包含这些字段(作为对象)。

自定义错误类型

该模块还定义了自定义错误类型来处理与 JWT 相关的错误。

  • JwtAlgorithmNotImplemented:表示请求的 JWT 算法未实现。
  • JwtTokenInvalid:表示 JWT 令牌无效。
  • JwtTokenNotBefore:表示令牌在有效日期之前使用。
  • JwtTokenExpired:表示令牌已过期。
  • JwtTokenIssuedAt:表示令牌中的“iat”声明不正确。
  • JwtTokenSignatureMismatched:表示令牌中的签名不匹配。

支持的 AlgorithmTypes

该模块支持以下 JWT 加密算法

  • HS256:使用 SHA-256 的 HMAC
  • HS384:使用 SHA-384 的 HMAC
  • HS512:使用 SHA-512 的 HMAC
  • RS256:使用 SHA-256 的 RSASSA-PKCS1-v1_5
  • RS384:使用 SHA-384 的 RSASSA-PKCS1-v1_5
  • RS512:使用 SHA-512 的 RSASSA-PKCS1-v1_5
  • PS256:使用 SHA-256 和带有 SHA-256 的 MGF1 的 RSASSA-PSS
  • PS384:使用 SHA-386 和带有 SHA-386 的 MGF1 的 RSASSA-PSS
  • PS512:使用 SHA-512 和带有 SHA-512 的 MGF1 的 RSASSA-PSS
  • ES256:使用 P-256 和 SHA-256 的 ECDSA
  • ES384:使用 P-384 和 SHA-384 的 ECDSA
  • ES512:使用 P-521 和 SHA-512 的 ECDSA
  • EdDSA:使用 Ed25519 的 EdDSA

在 MIT 许可下发布。