跳到主要内容

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",
// }