|
| 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