55
66from a2a .client .auth .credentials import CredentialService
77from a2a .client .middleware import ClientCallContext , ClientCallInterceptor
8- from a2a .types import AgentCard , APIKeySecurityScheme , HTTPAuthSecurityScheme , In , OAuth2SecurityScheme
8+ from a2a .types import AgentCard , APIKeySecurityScheme , HTTPAuthSecurityScheme , In , OAuth2SecurityScheme , OpenIdConnectSecurityScheme
99
1010logger = logging .getLogger (__name__ )
1111
@@ -31,36 +31,35 @@ async def intercept(
3131 return request_payload , http_kwargs
3232
3333 for requirement in agent_card .security :
34- for scheme_name in requirement : # Iterate through scheme names in the requirement
34+ for scheme_name in requirement :
3535 credential = await self ._credential_service .get_credentials (
3636 scheme_name , context
3737 )
3838 if credential and scheme_name in agent_card .securitySchemes :
3939 scheme_def_union = agent_card .securitySchemes [scheme_name ]
40- if not scheme_def_union :
41- continue
42- scheme_def = scheme_def_union .root # SecurityScheme is a RootModel
40+ if not scheme_def_union :
41+ continue
42+ scheme_def = scheme_def_union .root
4343
4444 headers = http_kwargs .get ('headers' , {})
4545
46- if isinstance (scheme_def , HTTPAuthSecurityScheme ):
47- if scheme_def .scheme .lower () == 'bearer' :
48- headers ['Authorization' ] = f"Bearer { credential } "
49- logger .debug (f"Added HTTP Bearer Auth for scheme '{ scheme_name } '." )
50- http_kwargs ['headers' ] = headers
51- return request_payload , http_kwargs
52- elif isinstance (scheme_def , OAuth2SecurityScheme ): # New condition for OAuth2
53- # For OAuth2, the credential obtained is the access token, used as a Bearer token.
46+ is_bearer_scheme = False
47+ if isinstance (scheme_def , HTTPAuthSecurityScheme ) and scheme_def .scheme .lower () == 'bearer' :
48+ is_bearer_scheme = True
49+ elif isinstance (scheme_def , (OAuth2SecurityScheme , OpenIdConnectSecurityScheme )):
50+ is_bearer_scheme = True
51+
52+ if is_bearer_scheme :
5453 headers ['Authorization' ] = f"Bearer { credential } "
55- logger .debug (f"Added OAuth2 Bearer token for scheme '{ scheme_name } '." )
54+ logger .debug (f"Added Bearer token for scheme '{ scheme_name } ' (type: { scheme_def . type } ) ." )
5655 http_kwargs ['headers' ] = headers
5756 return request_payload , http_kwargs
5857 elif isinstance (scheme_def , APIKeySecurityScheme ):
59- if scheme_def .in_ == In .header : # Use In.header enum member
58+ if scheme_def .in_ == In .header :
6059 headers [scheme_def .name ] = credential
6160 logger .debug (f"Added API Key Header for scheme '{ scheme_name } '." )
6261 http_kwargs ['headers' ] = headers
6362 return request_payload , http_kwargs
64- # Note: API keys in query or cookie are not handled by this interceptor modification .
63+ # Note: API keys in query or cookie are not handled here .
6564
6665 return request_payload , http_kwargs
0 commit comments