@@ -346,6 +346,7 @@ def test_pkce_code_exchange_request_plaintext(self):
346346 assert response ['access_token' ] in self .provider .authz_state .access_tokens
347347 assert_id_token_base_claims (response ['id_token' ], self .provider .signing_key , self .provider ,
348348 self .authn_request_args )
349+
349350 @patch ('time.time' , MOCK_TIME )
350351 def test_code_exchange_request_with_claims_requested_in_id_token (self ):
351352 claims_req = {'claims' : ClaimsRequest (id_token = Claims (email = None ))}
@@ -413,6 +414,25 @@ def test_handle_token_request_reject_invalid_code_verifier(self):
413414 with pytest .raises (InvalidTokenRequest ):
414415 self .provider .handle_token_request (urlencode (self .authorization_code_exchange_request_args ))
415416
417+ def test_handle_token_request_reject_unsynced_requests (self ):
418+ self .authorization_code_exchange_request_args ['code' ] = self .create_authz_code (
419+ {
420+ "code_challenge" : "_1f8tFjAtu6D1Df-GOyDPoMjCJdEvaSWsnqR6SLpzsw=" ,
421+ "code_challenge_method" : "S256"
422+ }
423+ )
424+ with pytest .raises (InvalidTokenRequest ):
425+ self .provider .handle_token_request (urlencode (self .authorization_code_exchange_request_args ))
426+
427+ def test_handle_token_request_reject_missing_code_challenge_method (self ):
428+ self .authorization_code_exchange_request_args ['code' ] = self .create_authz_code (
429+ {
430+ "code_challenge" : "_1f8tFjAtu6D1Df-GOyDPoMjCJdEvaSWsnqR6SLpzsw=" ,
431+ }
432+ )
433+ with pytest .raises (InvalidTokenRequest ):
434+ self .provider .handle_token_request (urlencode (self .authorization_code_exchange_request_args ))
435+
416436 def test_refresh_request (self ):
417437 self .provider .authz_state = AuthorizationState (HashBasedSubjectIdentifierFactory ('salt' ),
418438 refresh_token_lifetime = 600 )
0 commit comments