#json #jwt #key #deserialize #jwk #conversion #generation

jsonwebkey

JSON Web Key (JWK) (反)序列化、生成和转换

10个版本

0.3.5 2022年4月21日
0.3.4 2021年7月28日
0.3.2 2021年4月28日
0.3.1 2021年1月26日
0.0.3 2020年7月13日

#885 in 认证

Download history 22170/week @ 2024-03-14 31347/week @ 2024-03-21 28145/week @ 2024-03-28 19868/week @ 2024-04-04 20176/week @ 2024-04-11 27673/week @ 2024-04-18 27120/week @ 2024-04-25 28188/week @ 2024-05-02 22582/week @ 2024-05-09 31825/week @ 2024-05-16 30173/week @ 2024-05-23 34461/week @ 2024-05-30 24583/week @ 2024-06-06 25542/week @ 2024-06-13 28803/week @ 2024-06-20 22522/week @ 2024-06-27

109,387 每月下载量
20 个Crate中使用 (10 个直接使用)

MIT 许可证

53KB
1K SLoC

jsonwebkey

crates.io docs.rs codecov

JSON Web Key (JWK) (反)序列化、生成和转换。

目标

tl;dr: 将密钥格式化为其他crate可使用的格式;在这样做的同时尽可能安全。

  • 序列化和反序列化必需和推荐密钥类型(HS256、RS256、ES256)
  • 转换为PEM,以便与现有的JWT库(例如,jsonwebtoken)互操作
  • 密钥生成(特别适用于测试)

非目标

  • 成为一个功能齐全的JOSE框架

示例

从JSON反序列化

extern crate jsonwebkey as jwk;
// Generated using https://mkjwk.org/.
let jwt_str = r#"{
   "kty": "oct",
   "use": "sig",
   "kid": "my signing key",
   "k": "Wpj30SfkzM_m0Sa_B2NqNw",
   "alg": "HS256"
}"#;
let the_jwk: jwk::JsonWebKey = jwt_str.parse().unwrap();
println!("{:#?}", the_jwk); // looks like `jwt_str` but with reordered fields.

与其他crate一起使用

#[cfg(all(feature = "generate", feature = "jwt-convert"))] {
extern crate jsonwebtoken as jwt;
extern crate jsonwebkey as jwk;

#[derive(serde::Serialize, serde::Deserialize)]
struct TokenClaims {
   exp: usize
}

let mut my_jwk = jwk::JsonWebKey::new(jwk::Key::generate_p256());
my_jwk.set_algorithm(jwk::Algorithm::ES256);

let alg: jwt::Algorithm = my_jwk.algorithm.unwrap().into();
let token = jwt::encode(
    &jwt::Header::new(alg),
    &TokenClaims { exp: 1492 },
    &my_jwk.key.to_encoding_key(),
).unwrap();

let mut validation = jwt::Validation::new(alg);
validation.validate_exp = false;
jwt::decode::<TokenClaims>(&token, &my_jwk.key.to_decoding_key(), &validation).unwrap();
}

功能

  • pkcs-convert - 启用 Key::{to_der, to_pem}。这将引入yasna crate。
  • generate - 启用 Key::{generate_p256, generate_symmetric}。这将引入p256rand crates。
  • jwt-convert - 启用到jsonwebtoken crate中类型的转换。

依赖项

~1.2–4.5MB
~107K SLoC