Skip to main content

Crate json_web_tolkien

Crate json_web_tolkien 

Source
Expand description

Deserialization/Serialization of JWS for JWT.

This crate provides structs and ser(de) for json web tokens and json web signatures.

It does not supply signature verification, this allows you to choose and maintain the specific algorithm libraries that handle signature verification.

§Example


use json_web_token::prelude::*;
use serde::Deserialize;
use serde::de::{value, IntoDeserializer};
use std::borrow::Cow;

type Token = Jwt<Claims, Header>;

#[derive(Deserialize)]
struct Header {
    #[serde(alias = "alg")]
    algorithm: Algorithm
}

#[derive(Deserialize)]
pub struct Claims {
    #[serde(alias = "sub")]
    user_id: String,
}

fn decode(input: &str) -> Result<(Jws, Token), value::Error> {

    let jws : Jws;
    let jwt : Token;

    {
        let de = input.into_deserializer();
        jws = Jws::deserialize(de)?;
    }

    {
        let encoded_token : Cow<str> = jws.encoded_token();
        let de = encoded_token.as_ref().into_deserializer();

        jwt = Token::deserialize(de)?;
    }

    Ok((jws, jwt))
}

let valid_token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.KMUFsIDTnFmyG3nMiGM6H9FNFUROf3wh7SmqJp-QV30";

let (jws, jwt) = decode(&valid_token).unwrap();

let signature : Cow<[u8]> = jws.signature();

let claims : &Claims = jwt.claims();
let header : &Header = jwt.header();

Modules§

algorithm
error
jws
jwt
numeric_date
prelude
ser
util
Utilities for serialization and deserialization of claims.