jose
简介
JSON Object Signing and Encryption
组件接口
jwk.gs
JSON Web Key (JWK)
JWK是表示加密密钥的JSON对象。
TODO
JWK Set
函数原型 | 函数作用 |
---|---|
Key from_dict(map jwk) | 解析JWK并生成Key实例 |
jwt.gs
JSON Web Token
JWT是一种简洁、URL安全的方式,用于表示双方之间要传输的声明(claims)。JWT中的声明被编码为JSON对象,用作JWS的有效载荷,或作为JWE的明文,使声明能够被数字签名、通过MAC进行完整性保护以及加密。
JWT总是使用JWS压缩序列化(JWS Compact Serialization)或JWE压缩序列化(JWE Compact Serialization)表示。
函数原型 | 函数作用 |
---|---|
string encode(map claims, mixed key) | 编码声明集并返回JWT字符串 |
map decode(string token, mixed key = nil) | 验证JWT字符串的签名并解析声明 |
utility.gs
实用函数
函数原型 | 函数作用 |
---|---|
string base64url_encode(buffer buf) | base64url编码 |
buffer base64url_decode(string str) | base64url解码 |
样例
import pkg.crypto.rsa;
import pkg.jose.jwt;
import pkg.jose.jwk;
mixed hmac_key = jwk.new_hmac_key((buffer)"secret");
map claims = { "some": "payload" };
string encoded_jwt_1 = jwt.encode(claims, hmac_key);
printf("encode: %O\n", encoded_jwt_1);
// encode: "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzb21lIjoicGF5bG9hZCJ9.Joh1R2dYzkRvDkqv3sygm5YyK8Gi4ShZqbhK2gxcs2U"
printf("decode: %O\n", jwt.decode(encoded_jwt_1, hmac_key));
// decode: { /* sizeof() == 1 */
// "some" : "payload",
// }
mixed prv_key = rsa.generate_private_key(2048);
mixed pub_key = prv_key.public_key();
mixed rsa_key = jwk.new_rsa_key(prv_key, pub_key, "sha512");
string encoded_jwt_2 = jwt.encode(claims, rsa_key);
printf("encode: %O\n", encoded_jwt_2);
// encode: "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzUxMiJ9.eyJzb21lIjoicGF5bG9hZCJ9.UVPPmt1HIM0MGwDaN8AmUGs1nl-rZLbsoljPbA4p9D94lelOoipUo_8sVyTcBqqkyHSJEeS_ab-IYVP2gr3o3EugMeiAxAo7xNL6WcMJlPmjhPjZFtlngG_rL2BqDjbVqYF66j23bokS39CIYedr06qSAk7moQ7ydoopuABGqIO2Y9ofzevKPdMwVn_92AYWrHKa4fqj8om3Ll_BwCqk_aB8F_JAqTCACktqmAx0aFFuwz6C0mmX9erYM6PyYhbChwOdv6M0MCunmGTLcnH1w-vYqDim-esxHhEoi4tr9tomhcdycTzfhwQk5wP_C8fijttAUe3HCyLvEYW0lng10Q"
printf("decode: %O\n", jwt.decode(encoded_jwt_2, rsa_key));
// decode: { /* sizeof() == 1 */
// "some" : "payload",
// }