Cloudflare Worker JWT
一个适用于Cloudflare Workers的轻量级JWT实现,零依赖。
目录
安装
npm i @tsndr/cloudflare-worker-jwt
示例
基本示例
async () => {
import jwt from '@tsndr/cloudflare-worker-jwt'
// 创建令牌
const token = await jwt.sign({ name: 'John Doe', email: 'john.doe@gmail.com' }, 'secret')
// 验证令牌
const isValid = await jwt.verify(token, 'secret')
// 检查有效性
if (!isValid)
return
// 解码令牌
const { payload } = jwt.decode(token)
}
限制时间范围
async () => {
import jwt from '@tsndr/cloudflare-worker-jwt'
// 创建令牌
const token = await jwt.sign({
name: 'John Doe',
email: 'john.doe@gmail.com',
nbf: Math.floor(Date.now() / 1000) + (60 * 60), // 生效时间:现在 + 1小时
exp: Math.floor(Date.now() / 1000) + (2 * (60 * 60)) // 过期时间:现在 + 2小时
}, 'secret')
// 验证令牌
const isValid = await jwt.verify(token, 'secret') // false
// 检查有效性
if (!isValid)
return
// 解码令牌
const { payload } = jwt.decode(token) // { name: 'John Doe', email: 'john.doe@gmail.com', ... }
}
使用方法
签名
jwt.sign(payload, secret, [options])
签名一个载荷并返回令牌。
参数
参数 | 类型 | 状态 | 默认值 | 描述 |
---|---|---|---|---|
payload | object | 必需的 | - | 载荷对象。要使用nbf (生效时间)和/或exp (过期时间),请将nbf 和/或exp 添加到载荷中。 |
secret | string , JsonWebKey , CryptoKey | 必需的 | - | 用于签名载荷的字符串。 |
options | string , object | 可选的 | HS256 | 可以是algorithm 字符串或一个对象。 |
options.algorithm | string | 可选的 | HS256 | 参见可用算法 |
options.keyid | string | 可选的 | undefined | 要在结果JWT头部设置的keyid 或kid 。 |
返回值
返回一个string
类型的令牌。
验证
jwt.verify(token, secret, [options])
验证令牌的完整性并返回一个布尔值。
参数 | 类型 | 状态 | 默认值 | 描述 |
---|---|---|---|---|
token | string | 必需的 | - | 由jwt.sign() 生成的令牌字符串。 |
secret | string , JsonWebKey , CryptoKey | 必需的 | - | 用于签名载荷的字符串。 |
options | string , object | 可选的 | HS256 | 可以是algorithm 字符串或一个对象。 |
options.algorithm | string | 可选的 | HS256 | 参见可用算法 |
options.clockTolerance | number | 可选的 | 0 | 时钟容差(以秒为单位),用于处理略微不同步的系统。 |
options.throwError | boolean | 可选的 | false | 默认情况下,我们只会抛出实现错误,只有当您希望验证错误也被抛出时才将此设置为true 。 |
抛出
如果options.throwError
为true
且令牌无效,将抛出错误。
返回值
如果签名、nbf
(如果设置)和exp
(如果设置)有效,则返回true
,否则返回false
。
解码
jwt.decode(token)
返回载荷,不验证令牌的完整性。请先使用jwt.verify()
以确保应用程序的安全!
参数 | 类型 | 状态 | 默认值 | 描述 |
---|---|---|---|---|
token | string | 必需的 | - | 由jwt.sign() 生成的令牌字符串。 |
返回值
返回一个包含header
和payload
的object
:
{
header: {
alg: 'HS256',
typ: 'JWT'
},
payload: {
name: 'John Doe',
email: 'john.doe@gmail.com'
}
}
可用算法
- ES256
- ES384
- ES512
- HS256
- HS384
- HS512
- RS256
- RS384
- RS512