Crate aliri

source ·
Expand description

This crate implements the Javascript/JSON Object Signing and Encryption (JOSE) standards, including:

JSON Web Encryption (JWE), RFC7516, is not yet supported.

§Example

use aliri_base64::Base64UrlRef;
use aliri::{jwa, jwk, jws, jwt, jwt::CoreHeaders, Jwk, JwtRef};
use regex::Regex;
use aliri::jwt::HasAlgorithm;

let token = JwtRef::from_str(concat!(
    "eyJhbGciOiJIUzI1NiIsImtpZCI6InRlc3Qga2V5In0.",
    "eyJzdWIiOiJBbGlyaSIsImF1ZCI6Im15X2FwaSIsImlzcyI6ImF1dGhvcml0eSJ9.",
    "yKDd4Ba3fdedqRKHrSUUMuF01-ctdXzEKM9oyWjSx9A"
));

let secret = Base64UrlRef::from_slice(b"test").to_owned();
let key = Jwk::from(jwa::Hmac::new(secret))
    .with_algorithm(jwa::Algorithm::HS256)
    .with_key_id(jwk::KeyId::from_static("test key"));

let mut keys = aliri::Jwks::default();
keys.add_key(key);

let validator = jwt::CoreValidator::default()
    .ignore_expiration()
    .add_approved_algorithm(jwa::Algorithm::HS256)
    .add_allowed_audience(jwt::Audience::from_static("my_api"))
    .require_issuer(jwt::Issuer::from_static("authority"))
    .check_subject(Regex::new("^Al.ri$").unwrap());

let decomposed: jwt::Decomposed = token.decompose().unwrap();
let key_ref = keys.get_key_by_id(decomposed.kid().unwrap(), decomposed.alg()).unwrap();

let data: jwt::Validated = token.verify(key_ref, &validator)
    .expect("JWT was invalid");

Inspect this token at jwt.io and verify with the shared secret test.

Modules§

  • Common errors
  • Implementations of the JSON Web Algorithms (JWA) standard
  • Implementations of the JSON Web Keys (JWK) standard
  • Implementations of the JSON Web Signature (JWS) standard
  • Implementations of the JSON Web Tokens (JWT) standard

Structs§

  • An identified JSON Web Key
  • A JSON Web Key Set (JWKS)
  • A JSON Web Token
  • A borrowed reference to a JSON Web Token (Jwt)