Skip to content

Commit 2fdb0fe

Browse files
Maronatoauvipy
authored andcommitted
Fix PKCE credentials not being captured during authorize requests (#707)
* fix pkce credentials not being passed by oauthlib * support oauthlibs native implementation when added
1 parent 6d0c513 commit 2fdb0fe

File tree

2 files changed

+13
-6
lines changed

2 files changed

+13
-6
lines changed

oauth2_provider/views/base.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ class BaseAuthorizationView(LoginRequiredMixin, OAuthLibMixin, View):
3232
* Implicit grant
3333
3434
"""
35+
3536
def dispatch(self, request, *args, **kwargs):
3637
self.oauth2_data = {}
3738
return super().dispatch(request, *args, **kwargs)
@@ -132,6 +133,16 @@ def form_valid(self, form):
132133
def get(self, request, *args, **kwargs):
133134
try:
134135
scopes, credentials = self.validate_authorization_request(request)
136+
# TODO: Remove the two following lines after oauthlib updates its implementation
137+
# https://github.com/jazzband/django-oauth-toolkit/pull/707#issuecomment-485011945
138+
credentials["code_challenge"] = credentials.get(
139+
"code_challenge",
140+
request.GET.get("code_challenge", None)
141+
)
142+
credentials["code_challenge_method"] = credentials.get(
143+
"code_challenge_method",
144+
request.GET.get("code_challenge_method", None)
145+
)
135146
except OAuthToolkitError as error:
136147
# Application is not available at this time.
137148
return self.error_response(error, application=None)
@@ -149,8 +160,8 @@ def get(self, request, *args, **kwargs):
149160
kwargs["redirect_uri"] = credentials["redirect_uri"]
150161
kwargs["response_type"] = credentials["response_type"]
151162
kwargs["state"] = credentials["state"]
152-
kwargs["code_challenge"] = credentials.get("code_challenge", None)
153-
kwargs["code_challenge_method"] = credentials.get("code_challenge_method", None)
163+
kwargs["code_challenge"] = credentials["code_challenge"]
164+
kwargs["code_challenge_method"] = credentials["code_challenge_method"]
154165

155166
self.oauth2_data = kwargs
156167
# following two loc are here only because of https://code.djangoproject.com/ticket/17795

tests/test_authorization_code.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1072,9 +1072,6 @@ def test_public_pkce_plain_authorize_get(self):
10721072
url = "{url}?{qs}".format(url=reverse("oauth2_provider:authorize"), qs=query_string)
10731073

10741074
response = self.client.get(url)
1075-
print(code_challenge)
1076-
print(response.context_data)
1077-
print(url)
10781075
self.assertEqual(response.status_code, 200)
10791076
oauth2_settings.PKCE_REQUIRED = False
10801077

@@ -1130,7 +1127,6 @@ def test_public_pkce_plain(self):
11301127
}
11311128

11321129
response = self.client.post(reverse("oauth2_provider:token"), data=token_request_data)
1133-
print(response.content)
11341130
self.assertEqual(response.status_code, 200)
11351131

11361132
content = json.loads(response.content.decode("utf-8"))

0 commit comments

Comments
 (0)