rust使用jwt

toml

jsonwebtoken = "9"

rs

use serde::{Deserialize, Serialize};
use chrono::Utc;
use jsonwebtoken::errors::ErrorKind;
use jsonwebtoken::{decode, encode, Algorithm, DecodingKey, EncodingKey, Header, Validation};

#[derive(Debug, Serialize, Deserialize)]
struct Claims {
    exp: i64,
    name: String,
    uid: u64
}

fn main() {
    let  now = Utc::now().timestamp(); // nanosecond -> second
    let my_claims =
        Claims {
            exp: now + 86400,
            name: "测试用户".to_string(),
            uid: 1
        };
    let key = b"secret";

    let header =
        Header { kid: Some("signing_key".to_owned()), alg: Algorithm::HS512, ..Default::default() };

    let token = match encode(&header, &my_claims, &EncodingKey::from_secret(key)) {
        Ok(t) => t,
        Err(_) => panic!(), // in practice you would return the error
    };
    println!("{:?}", token);

    let token_data = match decode::<Claims>(
        &token,
        &DecodingKey::from_secret(key),
        &Validation::new(Algorithm::HS512),
    ) {
        Ok(c) => c,
        Err(err) => match *err.kind() {
            ErrorKind::InvalidToken => panic!(), // Example on how to handle a specific error
            _ => panic!(),
        },
    };
    println!("{:?}", token_data.claims);
}
posted @ 2024-10-23 17:31  朝阳1  阅读(9)  评论(0编辑  收藏  举报