|  | 
|  | 1 | +use jsonwebtoken::{Algorithm, TokenData, dangerous::insecure_decode}; | 
|  | 2 | +use wasm_bindgen_test::wasm_bindgen_test; | 
|  | 3 | + | 
|  | 4 | +#[derive(Debug, PartialEq, Eq, Clone, serde::Serialize, serde::Deserialize)] | 
|  | 5 | +pub struct Claims { | 
|  | 6 | +    sub: String, | 
|  | 7 | +    aud: Vec<String>, | 
|  | 8 | +    iat: i64, | 
|  | 9 | +    exp: i64, | 
|  | 10 | +} | 
|  | 11 | + | 
|  | 12 | +#[test] | 
|  | 13 | +#[wasm_bindgen_test] | 
|  | 14 | +fn dangerous_insecure_decode_valid_jwt() { | 
|  | 15 | +    let token = "eyJhbGciOiJSUzI1NiIsImtpZCI6IkRReWk2eEFmVVRPWmhJV2R5VWtKZTBFMUJmM1VXV05QIiwidHlwIjoiSldUIn0.eyJhdWQiOlsianNvbndlYnRva2VudGVzdCJdLCJleHAiOjE3NTk4MjYyMTcsImlhdCI6MTc1OTgyNTkxNywic3ViIjoic3BpZmZlOi8vZXhhbXBsZS5vcmcvdGVzdHNlcnZpY2UifQ.1qr1zmMM1hmF-sDZupGc7sT2zGQxl1hFfaUKFWz3UGUeJfUweZfFymGR4jIOJb9ywXmfaafGQbNypaHILPWpeXT8RB7GZ7APu09ZPFvLiKBqagCVWgwhXc30giYPfTq5iNct1ejdYgB1wLxtnrsDRoD_k3EMkB58pDz4H5ZFXc_3xB9TLGw2UdaZ7AloV1yFV6OC5PdleSKchb9E_WaBlbZWLjQNSLhN-YhCRLJ4K59lmL_Z2rnR2812kan8xicyxJAzZ6k0y6K8tpKxUhT--THz2ikUk_olOwDIMfjYe9xmAk-PVvIGwHUVR6fMYv74vhdpwVJACkI2U7HVUhRFkg"; | 
|  | 16 | + | 
|  | 17 | +    let TokenData { header, claims } = insecure_decode::<Claims>(token).unwrap(); | 
|  | 18 | + | 
|  | 19 | +    assert_eq!(Algorithm::RS256, header.alg); | 
|  | 20 | +    assert_eq!("DQyi6xAfUTOZhIWdyUkJe0E1Bf3UWWNP".to_string(), header.kid.unwrap()); | 
|  | 21 | +    assert_eq!(Some("JWT".to_string()), header.typ); | 
|  | 22 | + | 
|  | 23 | +    assert_eq!(vec!["jsonwebtokentest"], claims.aud); | 
|  | 24 | +    assert_eq!("spiffe://example.org/testservice", claims.sub); | 
|  | 25 | +    assert_eq!(1759825917, claims.iat); | 
|  | 26 | +    assert_eq!(1759826217, claims.exp); | 
|  | 27 | +} | 
|  | 28 | + | 
|  | 29 | +#[test] | 
|  | 30 | +#[wasm_bindgen_test] | 
|  | 31 | +fn dangerous_insecure_decode_invalid_sig() { | 
|  | 32 | +    let token = "eyJhbGciOiJSUzI1NiIsImtpZCI6IkRReWk2eEFmVVRPWmhJV2R5VWtKZTBFMUJmM1VXV05QIiwidHlwIjoiSldUIn0.eyJhdWQiOlsianNvbndlYnRva2VudGVzdCJdLCJleHAiOjE3NTk4MjYyMTcsImlhdCI6MTc1OTgyNTkxNywic3ViIjoic3BpZmZlOi8vZXhhbXBsZS5vcmcvdGVzdHNlcnZpY2UifQ.sig"; | 
|  | 33 | + | 
|  | 34 | +    let TokenData { header, claims } = insecure_decode::<Claims>(token).unwrap(); | 
|  | 35 | + | 
|  | 36 | +    assert_eq!(Algorithm::RS256, header.alg); | 
|  | 37 | +    assert_eq!("DQyi6xAfUTOZhIWdyUkJe0E1Bf3UWWNP".to_string(), header.kid.unwrap()); | 
|  | 38 | +    assert_eq!(Some("JWT".to_string()), header.typ); | 
|  | 39 | + | 
|  | 40 | +    assert_eq!(vec!["jsonwebtokentest"], claims.aud); | 
|  | 41 | +    assert_eq!("spiffe://example.org/testservice", claims.sub); | 
|  | 42 | +    assert_eq!(1759825917, claims.iat); | 
|  | 43 | +    assert_eq!(1759826217, claims.exp); | 
|  | 44 | +} | 
|  | 45 | + | 
|  | 46 | +#[test] | 
|  | 47 | +#[wasm_bindgen_test] | 
|  | 48 | +fn dangerous_insecure_decode_invalid_header() { | 
|  | 49 | +    let token = "badz.eyJhdWQiOlsianNvbndlYnRva2VudGVzdCJdLCJleHAiOjE3NTk4MjYyMTcsImlhdCI6MTc1OTgyNTkxNywic3ViIjoic3BpZmZlOi8vZXhhbXBsZS5vcmcvdGVzdHNlcnZpY2UifQ.sig"; | 
|  | 50 | + | 
|  | 51 | +    insecure_decode::<Claims>(token).unwrap_err(); | 
|  | 52 | +} | 
|  | 53 | + | 
|  | 54 | +#[test] | 
|  | 55 | +#[wasm_bindgen_test] | 
|  | 56 | +fn dangerous_insecure_decode_invalid_claims() { | 
|  | 57 | +    let token = "eyJhbGciOiJSUzI1NiIsImtpZCI6IkRReWk2eEFmVVRPWmhJV2R5VWtKZTBFMUJmM1VXV05QIiwidHlwIjoiSldUIn0.badz.sig"; | 
|  | 58 | + | 
|  | 59 | +    insecure_decode::<Claims>(token).unwrap_err(); | 
|  | 60 | +} | 
0 commit comments