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();