Skip to content

Commit b327ea9

Browse files
discobetadopry
authored andcommitted
try/except when looking for an access token to avoid 500
1 parent 2c83e6c commit b327ea9

File tree

2 files changed

+34
-2
lines changed

2 files changed

+34
-2
lines changed

oauth2_provider/oauth2_validators.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -726,8 +726,10 @@ def get_original_scopes(self, refresh_token, request, *args, **kwargs):
726726
# validate_refresh_token.
727727
rt = request.refresh_token_instance
728728
if not rt.access_token_id:
729-
return AccessToken.objects.get(source_refresh_token_id=rt.id).scope
730-
729+
try:
730+
return AccessToken.objects.get(source_refresh_token_id=rt.id).scope
731+
except AccessToken.DoesNotExist:
732+
return None
731733
return rt.access_token.scope
732734

733735
def validate_refresh_token(self, refresh_token, client, request, *args, **kwargs):

tests/test_authorization_code.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -851,6 +851,36 @@ def test_refresh_invalidates_old_tokens(self):
851851
self.assertIsNotNone(refresh_token.revoked)
852852
self.assertFalse(AccessToken.objects.filter(token=at).exists())
853853

854+
def test_refresh_twice_with_same_token_returns_401(self):
855+
"""
856+
Ensure that using a refresh token twice returns 401
857+
"""
858+
self.client.login(username="test_user", password="123456")
859+
authorization_code = self.get_auth()
860+
861+
token_request_data = {
862+
"grant_type": "authorization_code",
863+
"code": authorization_code,
864+
"redirect_uri": "http://example.org",
865+
}
866+
auth_headers = get_basic_auth_header(self.application.client_id, CLEARTEXT_SECRET)
867+
868+
response = self.client.post(reverse("oauth2_provider:token"), data=token_request_data, **auth_headers)
869+
content = json.loads(response.content.decode("utf-8"))
870+
871+
rt = content["refresh_token"]
872+
873+
token_request_data = {
874+
"grant_type": "refresh_token",
875+
"refresh_token": rt,
876+
"scope": content["scope"],
877+
}
878+
response = self.client.post(reverse("oauth2_provider:token"), data=token_request_data, **auth_headers)
879+
self.assertEqual(response.status_code, 200)
880+
881+
response = self.client.post(reverse("oauth2_provider:token"), data=token_request_data, **auth_headers)
882+
self.assertEqual(response.status_code, 400)
883+
854884
def test_refresh_no_scopes(self):
855885
"""
856886
Request an access token using a refresh token without passing any scope

0 commit comments

Comments
 (0)