@@ -398,6 +398,8 @@ def test_do_2nd_refresh_access_token(self):
398398 grant = self .endpoint_context .authz (session_id , areq )
399399 code = self ._mint_code (grant , areq ["client_id" ])
400400
401+ _mngr = self .endpoint_context .session_manager
402+ _mngr .conf ["token_handler_args" ]["refresh" ]["kwargs" ]["revoke_refresh_on_issue" ]= False
401403 _cntx = self .endpoint_context
402404
403405 _token_request = TOKEN_REQ_DICT .copy ()
@@ -423,8 +425,7 @@ def test_do_2nd_refresh_access_token(self):
423425 _2nd_request = REFRESH_TOKEN_REQ .copy ()
424426 _2nd_request ["refresh_token" ] = _resp ["response_args" ]["refresh_token" ]
425427 _2nd_req = self .token_endpoint .parse_request (_request .to_json ())
426- _2nd_resp = self .token_endpoint .process_request (request = _req , issue_refresh = True )
427-
428+ _2nd_resp = self .token_endpoint .process_request (request = _2nd_req , issue_refresh = True )
428429 assert set (_2nd_resp .keys ()) == {"cookie" , "response_args" , "http_headers" }
429430 assert set (_2nd_resp ["response_args" ].keys ()) == {
430431 "access_token" ,
@@ -475,6 +476,83 @@ def test_new_refresh_token(self, conf):
475476
476477 assert first_refresh_token != second_refresh_token
477478
479+ def test_revoke_on_issue_refresh_token (self , conf ):
480+ self .endpoint_context .cdb ["client_1" ] = {
481+ "client_secret" : "hemligt" ,
482+ "redirect_uris" : [("https://example.com/cb" , None )],
483+ "client_salt" : "salted" ,
484+ "endpoint_auth_method" : "client_secret_post" ,
485+ "response_types" : ["code" , "token" , "code id_token" , "id_token" ],
486+ }
487+
488+ _mngr = self .endpoint_context .session_manager
489+ _mngr .conf ["token_handler_args" ]["refresh" ]["kwargs" ]["revoke_refresh_on_issue" ]= True
490+ areq = AUTH_REQ .copy ()
491+ areq ["scope" ] = ["email" ]
492+
493+ session_id = self ._create_session (areq )
494+ grant = self .endpoint_context .authz (session_id , areq )
495+ code = self ._mint_code (grant , areq ["client_id" ])
496+
497+ _token_request = TOKEN_REQ_DICT .copy ()
498+ _token_request ["code" ] = code .value
499+ _req = self .token_endpoint .parse_request (_token_request )
500+ _resp = self .token_endpoint .process_request (request = _req , issue_refresh = True )
501+ assert "refresh_token" in _resp ["response_args" ]
502+ first_refresh_token = _resp ["response_args" ]["refresh_token" ]
503+
504+ _refresh_request = REFRESH_TOKEN_REQ .copy ()
505+ _refresh_request ["refresh_token" ] = first_refresh_token
506+ _2nd_req = self .token_endpoint .parse_request (_refresh_request .to_json ())
507+ _2nd_resp = self .token_endpoint .process_request (request = _2nd_req , issue_refresh = True )
508+ assert "refresh_token" in _2nd_resp ["response_args" ]
509+ second_refresh_token = _2nd_resp ["response_args" ]["refresh_token" ]
510+
511+ assert first_refresh_token != second_refresh_token
512+ first_refresh_token = grant .get_token (first_refresh_token )
513+ second_refresh_token = grant .get_token (second_refresh_token )
514+ assert first_refresh_token .revoked is True
515+ assert second_refresh_token .revoked is False
516+
517+ def test_revoke_on_issue_refresh_token_per_client (self , conf ):
518+ self .endpoint_context .cdb ["client_1" ] = {
519+ "client_secret" : "hemligt" ,
520+ "redirect_uris" : [("https://example.com/cb" , None )],
521+ "client_salt" : "salted" ,
522+ "endpoint_auth_method" : "client_secret_post" ,
523+ "response_types" : ["code" , "token" , "code id_token" , "id_token" ],
524+ }
525+ self .endpoint_context .cdb [AUTH_REQ ["client_id" ]]["revoke_refresh_on_issue" ] = True
526+ areq = AUTH_REQ .copy ()
527+ areq ["scope" ] = ["openid" , "offline_access" ]
528+
529+ session_id = self ._create_session (areq )
530+ grant = self .endpoint_context .authz (session_id , areq )
531+ code = self ._mint_code (grant , areq ["client_id" ])
532+
533+ _token_request = TOKEN_REQ_DICT .copy ()
534+ _token_request ["code" ] = code .value
535+ _req = self .token_endpoint .parse_request (_token_request )
536+ _resp = self .token_endpoint .process_request (request = _req , issue_refresh = True )
537+ assert "refresh_token" in _resp ["response_args" ]
538+ first_refresh_token = _resp ["response_args" ]["refresh_token" ]
539+
540+ _refresh_request = REFRESH_TOKEN_REQ .copy ()
541+ _refresh_request ["refresh_token" ] = first_refresh_token
542+ _2nd_req = self .token_endpoint .parse_request (_refresh_request .to_json ())
543+ _2nd_resp = self .token_endpoint .process_request (request = _2nd_req , issue_refresh = True )
544+ assert "refresh_token" in _2nd_resp ["response_args" ]
545+ second_refresh_token = _2nd_resp ["response_args" ]["refresh_token" ]
546+
547+ _2d_refresh_request = REFRESH_TOKEN_REQ .copy ()
548+ _2d_refresh_request ["refresh_token" ] = second_refresh_token
549+
550+ assert first_refresh_token != second_refresh_token
551+ first_refresh_token = grant .get_token (first_refresh_token )
552+ second_refresh_token = grant .get_token (second_refresh_token )
553+ assert first_refresh_token .revoked is True
554+ assert second_refresh_token .revoked is False
555+
478556 def test_refresh_scopes (self ):
479557 areq = AUTH_REQ .copy ()
480558 areq ["scope" ] = ["email" , "profile" ]
@@ -695,4 +773,4 @@ def test_refresh_token_request_other_client(self):
695773 assert isinstance (_resp , TokenErrorResponse )
696774 assert _resp .to_dict () == {
697775 "error" : "invalid_grant" , "error_description" : "Wrong client"
698- }
776+ }
0 commit comments