3636 AUTHLIB_AVAILABLE = False
3737
3838
39+ def _normalize_oauth_scopes (
40+ scopes : dict [str , str ] | list [str ] | None ,
41+ ) -> list [str ]:
42+ """Normalize OAuth scopes into the list shape expected by authlib."""
43+ if not scopes :
44+ return []
45+ if isinstance (scopes , dict ):
46+ return list (scopes .keys ())
47+ return list (scopes )
48+
49+
3950class AuthHandler :
4051 """A handler that handles the auth flow in Agent Development Kit to help
4152 orchestrate the credential request and response flow (e.g. OAuth flow)
@@ -164,7 +175,7 @@ def generate_auth_uri(
164175
165176 if isinstance (auth_scheme , OpenIdConnectWithConfig ):
166177 authorization_endpoint = auth_scheme .authorization_endpoint
167- scopes = auth_scheme .scopes
178+ scopes = _normalize_oauth_scopes ( auth_scheme .scopes )
168179 else :
169180 authorization_endpoint = (
170181 auth_scheme .flows .implicit
@@ -176,17 +187,20 @@ def generate_auth_uri(
176187 or auth_scheme .flows .password
177188 and auth_scheme .flows .password .tokenUrl
178189 )
179- scopes = (
180- auth_scheme .flows .implicit
181- and auth_scheme .flows .implicit .scopes
182- or auth_scheme .flows .authorizationCode
183- and auth_scheme .flows .authorizationCode .scopes
184- or auth_scheme .flows .clientCredentials
185- and auth_scheme .flows .clientCredentials .scopes
186- or auth_scheme .flows .password
187- and auth_scheme .flows .password .scopes
188- )
189- scopes = list (scopes .keys ())
190+ if auth_scheme .flows .implicit :
191+ scopes = _normalize_oauth_scopes (auth_scheme .flows .implicit .scopes )
192+ elif auth_scheme .flows .authorizationCode :
193+ scopes = _normalize_oauth_scopes (
194+ auth_scheme .flows .authorizationCode .scopes
195+ )
196+ elif auth_scheme .flows .clientCredentials :
197+ scopes = _normalize_oauth_scopes (
198+ auth_scheme .flows .clientCredentials .scopes
199+ )
200+ elif auth_scheme .flows .password :
201+ scopes = _normalize_oauth_scopes (auth_scheme .flows .password .scopes )
202+ else :
203+ scopes = []
190204
191205 client = OAuth2Session (
192206 auth_credential .oauth2 .client_id ,
0 commit comments