安装jsrsasign库
npm install jsrsasign
生成JWT令牌
生成JWT令牌是通过使用 jsrsasign 库中的一个方法:
jsrsasign.jws.JWS.sign(alg, header, payload, "key-word")
需要传入四个参数:
alg
一般是与后端约定好一个算法
以下是一些常见的 alg 参数值和它们对应的加密算法:
RS256:使用RSA算法和SHA-256哈希算法进行数字签名。
RS384:使用RSA算法和SHA-384哈希算法进行数字签名。
RS512:使用RSA算法和SHA-512哈希算法进行数字签名。
HS256:使用HMAC算法和SHA-256哈希算法进行加密。
HS384:使用HMAC算法和SHA-384哈希算法进行加密。
HS512:使用HMAC算法和SHA-512哈希算法进行加密。
ES256:使用椭圆曲线数字签名算法 (ECDSA) 和SHA-256哈希算法进行数字签名。
ES384:使用椭圆曲线数字签名算法 (ECDSA) 和SHA-384哈希算法进行数字签名。
ES512:使用椭圆曲线数字签名算法 (ECDSA) 和SHA-512哈希算法进行数字签名。
header
要签名的头部,通常是一个 JSON 字符串。它包含有关签名的元数据和算法等信息,例:
// alg是算法,如果在签名的头部中设置,则不用在第一个参数设置,但是要传入null
// typ是令牌的类型
const header = { alg: "HS256", typ: "JWT" };
payload
要签名的有效载荷,通常是一个 JSON 字符串。它包含了要传输或保存的实际数据,例:
// 设置JWT有效载荷
const payload = {
uid: "", // 用户Id
exp: Math.floor(Date.now() / 1000) + 600, // 过期时间(当前时间戳加10分钟)
};
一般有更多要加密的值,这里只是举例说明
key-word
与后端约定好的私钥,这是非常重要的一个值,生成的token如果没有这个私钥,是无法解密的,一般是一个字符串。
全部示例:
代码
<script>
import jsrsasign from "jsrsasign";
// 设置头部信息
const header = { alg: "HS256", typ: "JWT" };
// 设置JWT有效载荷
const payload = {
uid: "", // 用户Id
exp: Math.floor(Date.now() / 1000) + 600, // 过期时间(当前时间戳加10分钟)
};
let token = jsrsasign.jws.JWS.sign(
"HS256",
JSON.stringify(header),
JSON.stringify(payload),
"key-word"
);
console.log(token);
</script>