Skip to content

Commit

Permalink
Check for errors in authorization code response (#680)
Browse files Browse the repository at this point in the history
Check for errors in authorization code response
  • Loading branch information
JonathanHuot committed Jun 12, 2019
2 parents d2dcb0f + 8407495 commit 76d8d34
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 6 deletions.
9 changes: 6 additions & 3 deletions oauthlib/oauth2/rfc6749/parameters.py
Original file line number Diff line number Diff line change
Expand Up @@ -264,12 +264,15 @@ def parse_authorization_code_response(uri, state=None):
query = urlparse.urlparse(uri).query
params = dict(urlparse.parse_qsl(query))

if not 'code' in params:
raise MissingCodeError("Missing code parameter in response.")

if state and params.get('state', None) != state:
raise MismatchingStateError()

if 'error' in params:
raise_from_error(params.get('error'), params)

if not 'code' in params:
raise MissingCodeError("Missing code parameter in response.")

return params


Expand Down
9 changes: 6 additions & 3 deletions tests/oauth2/rfc6749/test_parameters.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,8 @@ def setUp(self):
error_nocode = 'https://client.example.com/cb?state=xyz'
error_nostate = 'https://client.example.com/cb?code=SplxlOBeZQQYbYS6WxSbIA'
error_wrongstate = 'https://client.example.com/cb?code=SplxlOBeZQQYbYS6WxSbIA&state=abc'
error_response = 'https://client.example.com/cb?error=access_denied&state=xyz'
error_denied = 'https://client.example.com/cb?error=access_denied&state=xyz'
error_invalid = 'https://client.example.com/cb?error=invalid_request&state=xyz'

implicit_base = 'https://example.com/cb#access_token=2YotnFZFEjr1zCsicMWpAA&scope=abc&'
implicit_response = implicit_base + 'state={0}&token_type=example&expires_in=3600'.format(state)
Expand Down Expand Up @@ -180,8 +181,10 @@ def test_grant_response(self):

self.assertRaises(MissingCodeError, parse_authorization_code_response,
self.error_nocode)
self.assertRaises(MissingCodeError, parse_authorization_code_response,
self.error_response)
self.assertRaises(AccessDeniedError, parse_authorization_code_response,
self.error_denied)
self.assertRaises(InvalidRequestFatalError, parse_authorization_code_response,
self.error_invalid)
self.assertRaises(MismatchingStateError, parse_authorization_code_response,
self.error_nostate, state=self.state)
self.assertRaises(MismatchingStateError, parse_authorization_code_response,
Expand Down

0 comments on commit 76d8d34

Please sign in to comment.