Apigee代理HTTPBasicAuth请求超时问题排查求助
Apigee代理转发HTTP Basic Auth请求网关超时问题排查与解决
收到的网关超时错误信息:
{"fault":{"faultstring":"Gateway Timeout","detail":{"errorcode":"messaging.adaptors.http.flow.GatewayTimeout"}}}
原始正常请求(不经过Apigee)
import requests from requests.auth import HTTPBasicAuth url = "https://myapi.com/path" auth = HTTPBasicAuth("username", "password") response = requests.get(url, auth=auth, verify=False)
经过Apigee代理的请求代码
import requests from requests.auth import HTTPBasicAuth url = "https://apigee-proxy.com/basepath/path" headers = { "apikey" : "XXXXXX", "username": "username", "password": "password" } response = requests.get(url, headers=headers, verify=False)
Apigee代理配置详情
ProxyEndpoint 配置
<ProxyEndpoint name="default"> <Description/> <FaultRules/> <PreFlow name="PreFlow"> <Request/> <Step> <Name>Extract-Variables-1</Name> </Step> <Step> <Name>Basic-Authentication-1</Name> </Step> <Response/> </PreFlow> <PostFlow name="PostFlow"> <Request/> <Response/> </PostFlow> <Flows> </Flows> <HTTPProxyConnection> <BasePath>/basepath</BasePath> <Properties/> <VirtualHost>default</VirtualHost> </HTTPProxyConnection> <RouteRule name="default"> <TargetEndpoint>default</TargetEndpoint> </RouteRule> </ProxyEndpoint>
Extract-Variables-1 配置
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1"> <Source>request</Source> <Header name="username"> <Pattern ignoreCase="true">{username}</Pattern> </Header> <Header name="password"> <Pattern ignoreCase="true">{password}</Pattern> </Header> <VariablePrefix>auth</VariablePrefix> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </ExtractVariables>
Basic-Authentication-1 策略配置
<BasicAuthentication async="false" continueOnError="true" enabled="true" name="Basic-Authentication-1"> <DisplayName>Basic Authentication-1</DisplayName> <Operation>Encode</Operation> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <User ref="auth.username"/> <Password ref="auth.password"/> <AssignTo createNew="false">request.header.Authorization</AssignTo> </BasicAuthentication>
TargetEndpoint 配置
<TargetEndpoint name="default"> <Description/> <FaultRules/> <PreFlow name="PreFlow"> <Request/> <Response/> </PreFlow> <PostFlow name="PostFlow"> <Request/> <Response/> </PostFlow> <Flows/> <HTTPTargetConnection> <LoadBalancer> <Server name="my_target"/> </LoadBalancer> <Path>/</Path> </HTTPTargetConnection> </TargetEndpoint>
目标服务器环境变量my_target值为myapi.com,端口443
排查结论
- 已验证Extract-Variables-1策略可正确提取请求头中的用户名和密码,Basic-Authentication-1策略也成功生成了
Authentication请求头,Basic Auth相关配置无问题。 - 最终确认网关超时问题由组织内部防火墙导致,与Apigee代理的Basic Auth配置无关。
内容的提问来源于stack exchange,提问作者cozzymotto
相关产品推荐
相关产品推荐

