JWT 身份验证助手
该助手提供一组函数用于编码、解码、签名与验证 JSON Web Token(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, // 5 分钟后过期
}
const secret = 'mySecretKey'
const token = await sign(payload, secret)配置项
required payload: unknown
要签名的 JWT 载荷。你可以参考 Payload 校验 添加更多声明。
required secret: string
用于签名或验证 JWT 的密钥。
optional alg: AlgorithmTypes
JWT 的签名/验证算法,默认为 HS256。
verify()
该函数会校验 JWT 的真实性与有效性,确保 Token 未被篡改;若你提供了 Payload 校验 所需字段,也会同步检查这些约束。
ts
verify(
token: string,
secret: string,
alg?: 'HS256'
issuer?: string | RegExp
): 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。
required secret: string
用于签名或验证 JWT 的密钥。
optional alg: AlgorithmTypes
JWT 的签名/验证算法,默认为 HS256。
optional issuer: string | RegExp
期望的签发者,用于验证。
decode()
该函数会在 不 验证签名的情况下解析 JWT,并返回其中的 header 与 payload。
ts
decode(token: string): { header: any; payload: any }示例
ts
import { decode } from 'hono/jwt'
// 解码 JWT
const tokenToDecode =
'eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9.eyJzdWIiOiAidXNlcjEyMyIsICJyb2xlIjogImFkbWluIn0.JxUwx6Ua1B0D1B0FtCrj72ok5cm1Pkmr_hL82sd7ELA'
const { header, payload } = decode(tokenToDecode)
console.log('Decoded Header:', header)
console.log('Decoded Payload:', payload)配置项
required token: string
需要解析的 JWT。
decode函数可以在 不 验证签名的情况下查看 JWT 的 header 与 payload,适合调试或提取信息。
Payload 校验
在验证 JWT 时,会针对以下载荷字段执行检查:
exp:确认 Token 是否已过期。nbf:确认 Token 是否在允许使用的时间之前被调用。iat:确认 Token 的签发时间不是未来。iss:确认 Token 是否由可信的签发者生成。
如果你希望在验证过程中启用这些检查,请确保 JWT 载荷中包含相应的字段。
自定义错误类型
模块定义了若干自定义错误,便于处理与 JWT 相关的问题。
JwtAlgorithmNotImplemented:请求的 JWT 算法尚未实现。JwtTokenInvalid:JWT 无效。JwtTokenNotBefore:Token 在允许时间之前被使用。JwtTokenExpired:Token 已过期。JwtTokenIssuedAt:Token 的iat声明不正确。JwtTokenIssuer:Token 的iss声明不正确。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(SHA-256) 的 RSASSA-PSSPS384:基于 SHA-384 与 MGF1(SHA-384) 的 RSASSA-PSSPS512:基于 SHA-512 与 MGF1(SHA-512) 的 RSASSA-PSSES256:P-256 + SHA-256 的 ECDSAES384:P-384 + SHA-384 的 ECDSAES512:P-521 + SHA-512 的 ECDSAEdDSA:使用 Ed25519 的 EdDSA