examples: Add took to generate a JWT for testing
parent
3b42be1797
commit
02d41e922d
|
@ -31,3 +31,5 @@ serial_test = "2.0.0"
|
|||
tempfile = "3.8.1"
|
||||
tower = { version = "0.4.13", features = ["util"] }
|
||||
|
||||
[[example]]
|
||||
name = "make-token"
|
||||
|
|
|
@ -0,0 +1,47 @@
|
|||
use std::time;
|
||||
|
||||
use argon2::Argon2;
|
||||
use jsonwebtoken::{encode, EncodingKey};
|
||||
use serde::Serialize;
|
||||
use uuid::Uuid;
|
||||
|
||||
#[derive(Debug, Serialize)]
|
||||
struct Claims {
|
||||
sub: String,
|
||||
iss: String,
|
||||
aud: String,
|
||||
iat: u64,
|
||||
nbf: u64,
|
||||
exp: u64,
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let args: Vec<_> = std::env::args().collect();
|
||||
let hostname = &args[1];
|
||||
let machine_id = Uuid::parse_str(&args[2]).unwrap();
|
||||
let audience = &args[3];
|
||||
|
||||
let now = time::SystemTime::now()
|
||||
.duration_since(time::UNIX_EPOCH)
|
||||
.unwrap()
|
||||
.as_secs();
|
||||
let claims = Claims {
|
||||
sub: hostname.into(),
|
||||
iss: hostname.into(),
|
||||
aud: audience.into(),
|
||||
nbf: now - 60,
|
||||
iat: now,
|
||||
exp: now + 60,
|
||||
};
|
||||
let mut secret = [0u8; 32];
|
||||
Argon2::default()
|
||||
.hash_password_into(
|
||||
machine_id.as_bytes(),
|
||||
hostname.as_bytes(),
|
||||
&mut secret,
|
||||
)
|
||||
.unwrap();
|
||||
let key = EncodingKey::from_secret(&secret);
|
||||
eprintln!("{:?}", claims);
|
||||
println!("{}", encode(&Default::default(), &claims, &key).unwrap());
|
||||
}
|
Loading…
Reference in New Issue