Skip to content

Commit dcccc90

Browse files
committed
fix(auth): send PKCE code_challenge in auth URL
1 parent a1bf0e7 commit dcccc90

2 files changed

Lines changed: 13 additions & 3 deletions

File tree

src/google/adk/auth/auth_handler.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import secrets
1818
from typing import TYPE_CHECKING
1919

20+
from authlib.oauth2.rfc7636 import create_s256_code_challenge
2021
from fastapi.openapi.models import SecurityBase
2122

2223
from .auth_credential import AuthCredential
@@ -203,7 +204,12 @@ def generate_auth_uri(
203204
if not auth_credential.oauth2.code_verifier:
204205
auth_credential.oauth2.code_verifier = secrets.token_urlsafe(64)
205206
params["code_challenge_method"] = code_challenge_method
206-
params["code_verifier"] = auth_credential.oauth2.code_verifier
207+
if code_challenge_method == "S256":
208+
params["code_challenge"] = create_s256_code_challenge(
209+
auth_credential.oauth2.code_verifier
210+
)
211+
else:
212+
params["code_challenge"] = auth_credential.oauth2.code_verifier
207213

208214
uri, state = client.create_authorization_url(
209215
url=authorization_endpoint, **params

tests/unittests/auth/test_auth_handler.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,10 @@ def create_authorization_url(self, url, **kwargs):
6969
"&code_challenge_method="
7070
f"{kwargs.get('code_challenge_method')}"
7171
)
72-
params += "&code_challenge=mock_challenge"
72+
if kwargs.get("code_challenge"):
73+
params += f"&code_challenge={kwargs.get('code_challenge')}"
74+
if kwargs.get("code_verifier"):
75+
params += f"&code_verifier={kwargs.get('code_verifier')}"
7376
return f"{url}?{params}", "mock_state"
7477

7578
def fetch_token(
@@ -264,7 +267,8 @@ def test_generate_auth_uri_with_pkce(self, auth_config):
264267
result = handler.generate_auth_uri()
265268

266269
assert "code_challenge_method=S256" in result.oauth2.auth_uri
267-
assert "code_challenge=mock_challenge" in result.oauth2.auth_uri
270+
assert "code_challenge=" in result.oauth2.auth_uri
271+
assert "code_verifier=" not in result.oauth2.auth_uri
268272
assert result.oauth2.code_verifier
269273

270274
@patch("google.adk.auth.auth_handler.OAuth2Session", MockOAuth2Session)

0 commit comments

Comments
 (0)