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