Skip to content

Commit 6f4a9d5

Browse files
committed
Make set_issuer and set_audience require aud, iss claims
Addresses #493 set_audience and set_issuer convenience functions now adds `aud` and `iss` to `required_spec_claims`.
1 parent e681247 commit 6f4a9d5

1 file changed

Lines changed: 38 additions & 2 deletions

File tree

src/validation.rs

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,13 +143,17 @@ impl Validation {
143143

144144
/// `aud` is a collection of one or more acceptable audience members
145145
/// The simple usage is `set_audience(&["some aud name"])`
146+
/// Makes the `aud` claim required by adding to `required_spec_claims`
146147
pub fn set_audience<T: ToString>(&mut self, items: &[T]) {
148+
self.required_spec_claims.insert("aud".to_string());
147149
self.aud = Some(items.iter().map(|x| x.to_string()).collect());
148150
}
149151

150152
/// `iss` is a collection of one or more acceptable issuers members
151153
/// The simple usage is `set_issuer(&["some iss name"])`
154+
/// Makes the `iss` claim required by adding to `required_spec_claims`
152155
pub fn set_issuer<T: ToString>(&mut self, items: &[T]) {
156+
self.required_spec_claims.insert("iss".to_string());
153157
self.iss = Some(items.iter().map(|x| x.to_string()).collect());
154158
}
155159

@@ -808,17 +812,49 @@ mod tests {
808812
};
809813
}
810814

815+
#[test]
816+
#[wasm_bindgen_test]
817+
fn set_audience_missing_fails() {
818+
let claims = json!({});
819+
let mut validation = Validation::new(Algorithm::HS256);
820+
validation.validate_exp = false;
821+
validation.required_spec_claims = HashSet::new();
822+
validation.set_audience(&["None"]);
823+
let res = validate(deserialize_claims(&claims), &validation);
824+
assert!(res.is_err());
825+
826+
match res.unwrap_err().kind() {
827+
ErrorKind::MissingRequiredClaim(claim) => assert_eq!(claim, "aud"),
828+
_ => unreachable!(),
829+
};
830+
}
831+
832+
#[test]
833+
#[wasm_bindgen_test]
834+
fn set_issuer_missing_fails() {
835+
let claims = json!({});
836+
let mut validation = Validation::new(Algorithm::HS256);
837+
validation.validate_exp = false;
838+
validation.required_spec_claims = HashSet::new();
839+
validation.set_issuer(&["None"]);
840+
let res = validate(deserialize_claims(&claims), &validation);
841+
assert!(res.is_err());
842+
843+
match res.unwrap_err().kind() {
844+
ErrorKind::MissingRequiredClaim(claim) => assert_eq!(claim, "iss"),
845+
_ => unreachable!(),
846+
};
847+
}
848+
811849
// https://github.com/Keats/jsonwebtoken/issues/51
812850
#[test]
813851
#[wasm_bindgen_test]
814852
fn does_validation_in_right_order() {
815853
let claims = json!({ "exp": get_current_timestamp() + 10000 });
816854

817855
let mut validation = Validation::new(Algorithm::HS256);
818-
validation.set_required_spec_claims(&["exp", "iss"]);
819856
validation.leeway = 5;
820857
validation.set_issuer(&["iss no check"]);
821-
validation.set_audience(&["iss no check"]);
822858

823859
let res = validate(deserialize_claims(&claims), &validation);
824860
// It errors because it needs to validate iss/sub which are missing

0 commit comments

Comments
 (0)