JWT 身份验证助手
这个助手提供了用于编码、解码、签名和验证 JSON Web Tokens (JWT) 的函数。JWT 通常用于 Web 应用程序中的身份验证和授权目的。这个助手提供了强大的 JWT 功能,并支持各种加密算法。
导入
要使用这个助手,你可以像下面这样导入它:
ts
import { decode, sign, verify } from 'hono/jwt'
INFO
JWT 中间件 也从 hono/jwt
导入了 jwt
函数。
sign()
这个函数通过编码 payload 并使用指定的算法和密钥对其进行签名来生成 JWT token。
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 在 5 分钟后过期
}
const secret = 'mySecretKey'
const token = await sign(payload, secret)
选项
required payload: unknown
要签名的 JWT payload。你可以包含其他声明,例如 Payload 验证 中的声明。
required secret: string
用于 JWT 验证或签名的密钥。
optional alg: AlgorithmTypes
用于 JWT 签名或验证的算法。 默认为 HS256。
verify()
这个函数检查 JWT token 是否真实且仍然有效。它确保 token 没有被篡改,并且仅在你添加了 Payload 验证 时才检查有效性。
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)
选项
required token: string
要验证的 JWT token。
required secret: string
用于 JWT 验证或签名的密钥。
optional alg: AlgorithmTypes
用于 JWT 签名或验证的算法。 默认为 HS256。
decode()
这个函数解码 JWT token,但不执行签名验证。它从 token 中提取并返回 header 和 payload。
ts
decode(token: string): { header: any; payload: any };
示例
ts
import { decode } from 'hono/jwt'
// 解码 JWT token
const tokenToDecode =
'eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9.eyJzdWIiOiAidXNlcjEyMyIsICJyb2xlIjogImFkbWluIn0.JxUwx6Ua1B0D1B0FtCrj72ok5cm1Pkmr_hL82sd7ELA'
const { header, payload } = decode(tokenToDecode)
console.log('解码 Header:', header)
console.log('解码 Payload:', payload)
选项
required token: string
要解码的 JWT token。
decode
函数允许你检查 JWT token 的 header 和 payload,不执行 验证。 这对于调试或从 JWT token 中提取信息非常有用。
Payload 验证
当验证 JWT token 时,会执行以下 payload 验证:
exp
: 检查 token 以确保其未过期。nbf
: 检查 token 以确保其未在指定时间之前使用。iat
: 检查 token 以确保其不是在未来签发的。
如果打算在验证期间执行这些检查,请确保你的 JWT payload 包含这些字段(作为对象)。
自定义错误类型
该模块还定义了自定义错误类型来处理与 JWT 相关的错误。
JwtAlgorithmNotImplemented
: 表示请求的 JWT 算法未实现。JwtTokenInvalid
: 表示 JWT token 无效。JwtTokenNotBefore
: 表示 token 在其有效日期之前被使用。JwtTokenExpired
: 表示 token 已过期。JwtTokenIssuedAt
: 表示 token 中的 "iat" 声明不正确。JwtTokenSignatureMismatched
: 表示 token 中的签名不匹配。
支持的 AlgorithmTypes
该模块支持以下 JWT 加密算法:
HS256
: 使用 SHA-256 的 HMACHS384
: 使用 SHA-384 的 HMACHS512
: 使用 SHA-512 的 HMACRS256
: 使用 SHA-256 的 RSASSA-PKCS1-v1_5RS384
: 使用 SHA-384 的 RSASSA-PKCS1-v1_5RS512
: 使用 SHA-512 的 RSASSA-PKCS1-v1_5PS256
: 使用 SHA-256 和 MGF1 with SHA-256 的 RSASSA-PSSPS384
: 使用 SHA-386 和 MGF1 with SHA-386 的 RSASSA-PSSPS512
: 使用 SHA-512 和 MGF1 with SHA-512 的 RSASSA-PSSES256
: 使用 P-256 和 SHA-256 的 ECDSAES384
: 使用 P-384 和 SHA-384 的 ECDSAES512
: 使用 P-521 和 SHA-512 的 ECDSAEdDSA
: 使用 Ed25519 的 EdDSA