@@ -126,8 +126,9 @@ def parse_authentication_request(self, request_body, http_headers=None):
126126
127127 def authorize (self , authentication_request , # type: oic.oic.message.AuthorizationRequest
128128 user_id , # type: str
129- extra_id_token_claims = None
129+ extra_id_token_claims = None ,
130130 # type: Optional[Union[Mapping[str, Union[str, List[str]]], Callable[[str, str], Mapping[str, Union[str, List[str]]]]]
131+ extra_scopes = None ,
131132 ):
132133 # type: (...) -> oic.oic.message.AuthorizationResponse
133134 """
@@ -166,7 +167,11 @@ def authorize(self, authentication_request, # type: oic.oic.message.Authorizati
166167 if len (authentication_request ['response_type' ]) == 1 :
167168 # only id token is issued -> no way of doing userinfo request, so include all claims in ID Token,
168169 # even those requested by the scope parameter
169- requested_claims .update (scope2claims (authentication_request ['scope' ]))
170+ requested_claims .update (
171+ scope2claims (
172+ authentication_request ['scope' ], extra_scope_dict = extra_scopes
173+ )
174+ )
170175
171176 user_claims = self .userinfo .get_claims_for (user_id , requested_claims )
172177 response ['id_token' ] = self ._create_signed_id_token (authentication_request ['client_id' ], sub ,
@@ -340,7 +345,7 @@ def _do_code_exchange(self, request, # type: Dict[str, str]
340345 raise InvalidTokenRequest (str (e ), token_request ) from e
341346
342347 authentication_request = self .authz_state .get_authorization_request_for_code (token_request ['code' ])
343-
348+
344349 if token_request ['client_id' ] != authentication_request ['client_id' ]:
345350 logger .info ('Authorization code \' %s\' belonging to \' %s\' was used by \' %s\' ' ,
346351 token_request ['code' ], authentication_request ['client_id' ], token_request ['client_id' ])
@@ -415,7 +420,7 @@ def _verify_client_authentication(self, request_body, http_headers=None):
415420 token_request ['client_id' ] = verify_client_authentication (self .clients , token_request , http_headers .get ('Authorization' ))
416421 return token_request
417422
418- def handle_userinfo_request (self , request = None , http_headers = None ):
423+ def handle_userinfo_request (self , request = None , http_headers = None , extra_scopes = None ):
419424 # type: (Optional[str], Optional[Mapping[str, str]]) -> oic.oic.message.OpenIDSchema
420425 """
421426 Handles a userinfo request.
@@ -433,7 +438,7 @@ def handle_userinfo_request(self, request=None, http_headers=None):
433438 scope = introspection ['scope' ]
434439 user_id = self .authz_state .get_user_id_for_subject_identifier (introspection ['sub' ])
435440
436- requested_claims = scope2claims (scope .split ())
441+ requested_claims = scope2claims (scope .split (), extra_scope_dict = extra_scopes )
437442 authentication_request = self .authz_state .get_authorization_request_for_access_token (bearer_token )
438443 requested_claims .update (self ._get_requested_claims_in (authentication_request , 'userinfo' ))
439444 user_claims = self .userinfo .get_claims_for (user_id , requested_claims )
0 commit comments