Skip to content

Commit a598490

Browse files
Nikos Mastorislionick
authored andcommitted
Handle errors related to refresh token and client redirect URI
1 parent 42e3b95 commit a598490

File tree

3 files changed

+21
-9
lines changed

3 files changed

+21
-9
lines changed

src/idpyoidc/server/oauth2/authorization.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -125,11 +125,11 @@ def verify_uri(
125125
client_info = context.cdb.get(client_id)
126126
if not client_info:
127127
logger.error("No client info found")
128-
raise KeyError("No client info found")
128+
raise UnknownClient("No client info found")
129129

130130
req_redirect_uri_quoted = request.get(uri_type)
131131
if req_redirect_uri_quoted is None:
132-
raise ValueError(f"Wrong uri_type: {uri_type}")
132+
raise URIError(f"Wrong uri_type: {uri_type}")
133133

134134
req_redirect_uri = unquote(req_redirect_uri_quoted)
135135
req_redirect_uri_obj = urlparse(req_redirect_uri)
@@ -558,7 +558,7 @@ def _post_parse_request(self, request, client_id, context, **kwargs):
558558
# Get a verified redirect URI
559559
try:
560560
redirect_uri = get_uri(context, request, "redirect_uri", self.endpoint_type)
561-
except (RedirectURIError, ParameterError) as err:
561+
except (RedirectURIError, ParameterError, URIError, UnknownClient) as err:
562562
return self.authentication_error_response(
563563
request,
564564
error="invalid_request",

src/idpyoidc/server/oidc/token_helper/refresh_token.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
from cryptojwt.jws.exception import NoSuitableSigningKeys
88
from cryptojwt.jwt import utc_time_sans_frac
99

10+
from ...exception import InvalidBranchID
11+
from idpyoidc.exception import MissingRequiredAttribute
1012
from idpyoidc.message import Message
1113
from idpyoidc.message.oidc import RefreshAccessTokenRequest
1214
from idpyoidc.server.oauth2.token_helper import TokenEndpointHelper
@@ -140,16 +142,19 @@ def post_parse_request(
140142
request = RefreshAccessTokenRequest(**request.to_dict())
141143
_context = self.endpoint.upstream_get("context")
142144

143-
request.verify(
144-
keyjar=self.endpoint.upstream_get("attribute", "keyjar"), opponent_id=client_id
145-
)
145+
try:
146+
request.verify(
147+
keyjar=self.endpoint.upstream_get("attribute", "keyjar"), opponent_id=client_id
148+
)
149+
except MissingRequiredAttribute as e:
150+
return self.error_cls(error="invalid_grant", error_description=str(e))
146151

147152
_mngr = _context.session_manager
148153
try:
149154
_session_info = _mngr.get_session_info_by_token(
150155
request["refresh_token"], handler_key="refresh_token", grant=True
151156
)
152-
except (KeyError, UnknownToken, BadSyntax):
157+
except (KeyError, UnknownToken, BadSyntax, InvalidBranchID):
153158
logger.error("Refresh token invalid")
154159
return self.error_cls(error="invalid_grant", error_description="Invalid refresh token")
155160

src/idpyoidc/server/session/manager.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@
1313
from idpyoidc.server.exception import ConfigurationError
1414
from idpyoidc.server.session.grant_manager import GrantManager
1515
from idpyoidc.util import rndstr
16+
1617
from .database import Database
18+
from ..exception import InvalidBranchID
1719
from .grant import Grant
1820
from .grant import SessionToken
1921
from .info import ClientSessionInfo
@@ -480,8 +482,13 @@ def get_session_info(
480482
:param authorization_request: Whether the authorization_request should part of the response
481483
:return: A dictionary with session information
482484
"""
483-
res = self.branch_info(session_id)
484-
485+
try:
486+
res = self.branch_info(session_id)
487+
except InvalidBranchID as e:
488+
# Log the exception if needed
489+
logging.error(f"InvalidBranchID error: {str(e)}")
490+
raise
491+
485492
if authentication_event:
486493
res["authentication_event"] = res["grant"].authentication_event
487494

0 commit comments

Comments
 (0)