4747AUTH_REQ = AuthorizationRequest (
4848 client_id = "client_1" ,
4949 redirect_uri = "https://example.com/cb" ,
50- scope = ["openid " ],
50+ scope = ["email " ],
5151 state = "STATE" ,
5252 response_type = "code" ,
5353)
@@ -302,7 +302,7 @@ def test_process_request_using_private_key_jwt(self):
302302
303303 def test_do_refresh_access_token (self ):
304304 areq = AUTH_REQ .copy ()
305- areq ["scope" ] = ["openid " ]
305+ areq ["scope" ] = ["email " ]
306306
307307 session_id = self ._create_session (areq )
308308 grant = self .endpoint_context .authz (session_id , areq )
@@ -324,7 +324,7 @@ def test_do_refresh_access_token(self):
324324 _token .usage_rules ["supports_minting" ] = ["access_token" , "refresh_token" ]
325325
326326 _req = self .token_endpoint .parse_request (_request .to_json ())
327- _resp = self .token_endpoint .process_request (request = _req )
327+ _resp = self .token_endpoint .process_request (request = _req , issue_refresh = True )
328328 assert set (_resp .keys ()) == {"cookie" , "response_args" , "http_headers" }
329329 assert set (_resp ["response_args" ].keys ()) == {
330330 "access_token" ,
@@ -338,7 +338,7 @@ def test_do_refresh_access_token(self):
338338
339339 def test_do_2nd_refresh_access_token (self ):
340340 areq = AUTH_REQ .copy ()
341- areq ["scope" ] = ["openid" , "offline_access " ]
341+ areq ["scope" ] = ["email " ]
342342
343343 session_id = self ._create_session (areq )
344344 grant = self .endpoint_context .authz (session_id , areq )
@@ -361,16 +361,15 @@ def test_do_2nd_refresh_access_token(self):
361361 _token .usage_rules ["supports_minting" ] = [
362362 "access_token" ,
363363 "refresh_token" ,
364- "id_token" ,
365364 ]
366365
367366 _req = self .token_endpoint .parse_request (_request .to_json ())
368- _resp = self .token_endpoint .process_request (request = _req )
367+ _resp = self .token_endpoint .process_request (request = _req , issue_refresh = True )
369368
370369 _2nd_request = REFRESH_TOKEN_REQ .copy ()
371370 _2nd_request ["refresh_token" ] = _resp ["response_args" ]["refresh_token" ]
372371 _2nd_req = self .token_endpoint .parse_request (_request .to_json ())
373- _2nd_resp = self .token_endpoint .process_request (request = _req )
372+ _2nd_resp = self .token_endpoint .process_request (request = _req , issue_refresh = True )
374373
375374 assert set (_2nd_resp .keys ()) == {"cookie" , "response_args" , "http_headers" }
376375 assert set (_2nd_resp ["response_args" ].keys ()) == {
@@ -393,7 +392,7 @@ def test_new_refresh_token(self, conf):
393392 }
394393
395394 areq = AUTH_REQ .copy ()
396- areq ["scope" ] = ["openid" , "offline_access " ]
395+ areq ["scope" ] = ["email " ]
397396
398397 session_id = self ._create_session (areq )
399398 grant = self .endpoint_context .authz (session_id , areq )
@@ -422,9 +421,124 @@ def test_new_refresh_token(self, conf):
422421
423422 assert first_refresh_token != second_refresh_token
424423
424+ def test_refresh_scopes (self ):
425+ areq = AUTH_REQ .copy ()
426+ areq ["scope" ] = ["email" , "profile" ]
427+
428+ session_id = self ._create_session (areq )
429+ grant = self .endpoint_context .authz (session_id , areq )
430+ code = self ._mint_code (grant , areq ["client_id" ])
431+
432+ _token_request = TOKEN_REQ_DICT .copy ()
433+ _token_request ["code" ] = code .value
434+ _req = self .token_endpoint .parse_request (_token_request )
435+ _resp = self .token_endpoint .process_request (request = _req , issue_refresh = True )
436+
437+ _request = REFRESH_TOKEN_REQ .copy ()
438+ _request ["refresh_token" ] = _resp ["response_args" ]["refresh_token" ]
439+ _request ["scope" ] = ["email" ]
440+
441+ _req = self .token_endpoint .parse_request (_request .to_json ())
442+ _resp = self .token_endpoint .process_request (request = _req , issue_refresh = True )
443+ assert set (_resp .keys ()) == {"cookie" , "response_args" , "http_headers" }
444+ assert set (_resp ["response_args" ].keys ()) == {
445+ "access_token" ,
446+ "token_type" ,
447+ "expires_in" ,
448+ "refresh_token" ,
449+ "scope" ,
450+ }
451+
452+ _token_value = _resp ["response_args" ]["access_token" ]
453+ _session_info = self .session_manager .get_session_info_by_token (_token_value )
454+ at = self .session_manager .find_token (
455+ _session_info ["session_id" ], _token_value
456+ )
457+ rt = self .session_manager .find_token (
458+ _session_info ["session_id" ], _resp ["response_args" ]["refresh_token" ]
459+ )
460+
461+ assert at .scope == rt .scope == _request ["scope" ]
462+
463+ def test_refresh_more_scopes (self ):
464+ areq = AUTH_REQ .copy ()
465+ areq ["scope" ] = ["email" ]
466+
467+ session_id = self ._create_session (areq )
468+ grant = self .endpoint_context .authz (session_id , areq )
469+ code = self ._mint_code (grant , areq ["client_id" ])
470+
471+ _token_request = TOKEN_REQ_DICT .copy ()
472+ _token_request ["code" ] = code .value
473+ _req = self .token_endpoint .parse_request (_token_request )
474+ _resp = self .token_endpoint .process_request (request = _req , issue_refresh = True )
475+
476+ _request = REFRESH_TOKEN_REQ .copy ()
477+ _request ["refresh_token" ] = _resp ["response_args" ]["refresh_token" ]
478+ _request ["scope" ] = ["email" , "profile" ]
479+
480+ _req = self .token_endpoint .parse_request (_request .to_json ())
481+ assert isinstance (_req , TokenErrorResponse )
482+ _resp = self .token_endpoint .process_request (request = _req , issue_refresh = True )
483+
484+ assert _resp .to_dict () == {
485+ "error" : "invalid_request" ,
486+ "error_description" : "Invalid refresh scopes"
487+ }
488+
489+ def test_refresh_more_scopes_2 (self ):
490+ areq = AUTH_REQ .copy ()
491+ areq ["scope" ] = ["email" , "profile" ]
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+
502+ _request = REFRESH_TOKEN_REQ .copy ()
503+ _request ["refresh_token" ] = _resp ["response_args" ]["refresh_token" ]
504+ _request ["scope" ] = ["email" ]
505+
506+ _token_value = _resp ["response_args" ]["refresh_token" ]
507+
508+ _req = self .token_endpoint .parse_request (_request .to_json ())
509+ _resp = self .token_endpoint .process_request (request = _req , issue_refresh = True )
510+
511+ _token_value = _resp ["response_args" ]["refresh_token" ]
512+ _request ["refresh_token" ] = _token_value
513+ # We should be able to request the original requests scopes
514+ _request ["scope" ] = ["email" , "profile" ]
515+
516+ _req = self .token_endpoint .parse_request (_request .to_json ())
517+ _resp = self .token_endpoint .process_request (request = _req , issue_refresh = True )
518+
519+ assert set (_resp .keys ()) == {"cookie" , "response_args" , "http_headers" }
520+ assert set (_resp ["response_args" ].keys ()) == {
521+ "access_token" ,
522+ "token_type" ,
523+ "expires_in" ,
524+ "refresh_token" ,
525+ "scope" ,
526+ }
527+
528+ _token_value = _resp ["response_args" ]["access_token" ]
529+ _session_info = self .session_manager .get_session_info_by_token (_token_value )
530+ at = self .session_manager .find_token (
531+ _session_info ["session_id" ], _token_value
532+ )
533+ rt = self .session_manager .find_token (
534+ _session_info ["session_id" ], _resp ["response_args" ]["refresh_token" ]
535+ )
536+
537+ assert at .scope == rt .scope == _request ["scope" ]
538+
425539 def test_do_refresh_access_token_not_allowed (self ):
426540 areq = AUTH_REQ .copy ()
427- areq ["scope" ] = ["openid" , "offline_access " ]
541+ areq ["scope" ] = ["email " ]
428542
429543 session_id = self ._create_session (areq )
430544 grant = self .endpoint_context .authz (session_id , areq )
@@ -448,7 +562,7 @@ def test_do_refresh_access_token_not_allowed(self):
448562
449563 def test_do_refresh_access_token_revoked (self ):
450564 areq = AUTH_REQ .copy ()
451- areq ["scope" ] = ["openid " ]
565+ areq ["scope" ] = ["email " ]
452566
453567 session_id = self ._create_session (areq )
454568 grant = self .endpoint_context .authz (session_id , areq )
0 commit comments