|
2 | 2 | from typing import Optional |
3 | 3 | from typing import Union |
4 | 4 |
|
| 5 | +from cryptojwt import BadSyntax |
5 | 6 | from cryptojwt.exception import JWKESTException |
6 | 7 |
|
7 | 8 | from idpyoidc.exception import ImproperlyConfigured |
@@ -120,7 +121,9 @@ def process_request(self, req: Union[Message, dict], **kwargs): |
120 | 121 | except KeyError: # Missing code parameter - absolutely fatal |
121 | 122 | return self.error_cls(error="invalid_request", error_description="Missing code") |
122 | 123 |
|
123 | | - _session_info = _mngr.get_session_info_by_token(_access_code, grant=True) |
| 124 | + _session_info = _mngr.get_session_info_by_token( |
| 125 | + _access_code, grant=True, handler_key="authorization_code" |
| 126 | + ) |
124 | 127 | client_id = _session_info["client_id"] |
125 | 128 | if client_id != req["client_id"]: |
126 | 129 | logger.debug("{} owner of token".format(client_id)) |
@@ -208,7 +211,9 @@ def post_parse_request( |
208 | 211 |
|
209 | 212 | _mngr = self.endpoint.server_get("endpoint_context").session_manager |
210 | 213 | try: |
211 | | - _session_info = _mngr.get_session_info_by_token(request["code"], grant=True) |
| 214 | + _session_info = _mngr.get_session_info_by_token( |
| 215 | + request["code"], grant=True, handler_key="authorization_code" |
| 216 | + ) |
212 | 217 | except (KeyError, UnknownToken): |
213 | 218 | logger.error("Access Code invalid") |
214 | 219 | return self.error_cls(error="invalid_grant", error_description="Unknown code") |
@@ -241,7 +246,9 @@ def process_request(self, req: Union[Message, dict], **kwargs): |
241 | 246 | return self.error_cls(error="invalid_request", error_description="Wrong grant_type") |
242 | 247 |
|
243 | 248 | token_value = req["refresh_token"] |
244 | | - _session_info = _mngr.get_session_info_by_token(token_value, grant=True) |
| 249 | + _session_info = _mngr.get_session_info_by_token( |
| 250 | + token_value, grant=True, handler_key="refresh_token" |
| 251 | + ) |
245 | 252 | logger.debug("Session info: {}".format(_session_info)) |
246 | 253 |
|
247 | 254 | if _session_info["client_id"] != req["client_id"]: |
@@ -335,7 +342,9 @@ def post_parse_request( |
335 | 342 |
|
336 | 343 | _mngr = _context.session_manager |
337 | 344 | try: |
338 | | - _session_info = _mngr.get_session_info_by_token(request["refresh_token"], grant=True) |
| 345 | + _session_info = _mngr.get_session_info_by_token( |
| 346 | + request["refresh_token"], grant=True, handler_key="refresh_token" |
| 347 | + ) |
339 | 348 | except (KeyError, UnknownToken): |
340 | 349 | logger.error("Refresh token invalid") |
341 | 350 | return self.error_cls(error="invalid_grant", error_description="Invalid refresh token") |
@@ -414,13 +423,18 @@ def post_parse_request(self, request, client_id="", **kwargs): |
414 | 423 |
|
415 | 424 | _mngr = _context.session_manager |
416 | 425 | try: |
417 | | - _session_info = _mngr.get_session_info_by_token(request["subject_token"], grant=True) |
418 | | - except (KeyError, UnknownToken): |
419 | | - logger.error("Subject token invalid.") |
| 426 | + # token exchange is about minting one token based on another |
| 427 | + _handler_key = self.token_types_mapping[request["subject_token_type"]] |
| 428 | + _session_info = _mngr.get_session_info_by_token( |
| 429 | + request["subject_token"], grant=True, handler_key=_handler_key |
| 430 | + ) |
| 431 | + except (KeyError, UnknownToken, BadSyntax) as err: |
| 432 | + logger.error(f"Subject token invalid ({err}).") |
420 | 433 | return self.error_cls( |
421 | 434 | error="invalid_request", error_description="Subject token invalid" |
422 | 435 | ) |
423 | 436 |
|
| 437 | + # Find the token instance based on the token value |
424 | 438 | token = _mngr.find_token(_session_info["session_id"], request["subject_token"]) |
425 | 439 | if token.is_active() is False: |
426 | 440 | return self.error_cls( |
@@ -511,7 +525,10 @@ def process_request(self, request, **kwargs): |
511 | 525 | _context = self.endpoint.server_get("endpoint_context") |
512 | 526 | _mngr = _context.session_manager |
513 | 527 | try: |
514 | | - _session_info = _mngr.get_session_info_by_token(request["subject_token"], grant=True) |
| 528 | + _handler_key = self.token_types_mapping[request["subject_token_type"]] |
| 529 | + _session_info = _mngr.get_session_info_by_token( |
| 530 | + request["subject_token"], grant=True, handler_key=_handler_key |
| 531 | + ) |
515 | 532 | except ToOld: |
516 | 533 | logger.error("Subject token has expired.") |
517 | 534 | return self.error_cls( |
|
0 commit comments