2个版本
0.0.1-rc2 | 2023年11月15日 |
---|---|
0.0.1-rc0 | 2023年2月16日 |
#10 in #subject
32KB
675 行
BeNu
简单 & 紧凑的二进制凭证
未完成 |
---|
字段
名称 | 标志 | 类型 | 描述 |
---|---|---|---|
TYP |
0x1 |
字节 |
令牌的类型(例如用户或会话) |
SUBJECT |
0x2 |
数据 |
令牌的主题 |
INCREMENT |
0x4 |
整数 |
用于令牌无效化的增量 |
BEFORE |
0x8 |
整数 |
令牌过期的时间 |
AFTER |
0x10 |
整数 |
令牌有效的时间 |
DATA |
0x20 |
数据 |
定义的令牌声明 |
SALT |
0x40 |
数据 |
一些额外的盐 (为什么不行?) |
用法
use std::time::Duration;
use crate::signed::SignedToken;
use crate::{Header, Token};
// define key
let key = [0u8; 32];
// build the token
let token = Token::builder()
.typ(0x01)
.subject("Sam")
.data("Hello World!")
.before(Duration::from_secs(300));
println!("{:?}", token);
// seal and sign the token with the key
let token = token
.seal()
.sign(key.as_ref());
println!("{:?} -> {:?}", token.len(), token);
// create a signed token
let token = SignedToken::decode(&token).unwrap()
// verify the token with the key
.verify(&key.as_ref()).unwrap()
// require typ, subject, data.
.require(Header::TYP | Header::SUBJECT | Header::DATA | Header::BEFORE).unwrap()
// check the token is of the given type
.match_typ(0x01).unwrap()
// validate before time
.validate().unwrap()
// unseal the token
.unseal();
// get the subject field
println!("{:?}", token.subject().unwrap().as_str());
依赖项
~360–520KB
~12K SLoC