Rust JWT Authentication

Implement JWT authentication in Rust using the jsonwebtoken crate with HMAC-SHA256 signing, claims validation, expiry checking, and Axum extractor for.

Rust Auth Jwt

Code

snippet
use jsonwebtoken::{decode, encode, DecodingKey, EncodingKey, Validation, Header};
use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize)]
struct Claims {
    sub: String,
    exp: usize,
}

fn create_token(user_id: &str, secret: &str) -> String {
    let claims = Claims { sub: user_id.into(), exp: 9999999999 };
    encode(&Header::default(), &claims, &EncodingKey::from_secret(secret.as_ref())).unwrap()
}

fn verify_token(token: &str, secret: &str) -> Option<Claims> {
    let data = decode::<Claims>(token, &DecodingKey::from_secret(secret.as_ref()), &Validation::default());
    data.ok().map(|d| d.claims)
}