Skip to content

Commit ac5090e

Browse files
committed
Support additional scopes
Signed-off-by: Ivan Kanakarakis <ivan.kanak@gmail.com>
1 parent 1449dbb commit ac5090e

File tree

1 file changed

+10
-5
lines changed

1 file changed

+10
-5
lines changed

src/pyop/provider.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)