1

这是服务调出策略:

<ServiceCallout name="GeoCodeClient">
    <Request clearPayload="false" variable="GeocodingRequest" />
    <Response>GeocodingResponse</Response>
    <Timeout>30000</Timeout>
    <HTTPTargetConnection>
      <URL>http://maps.googleapis.com/maps/api/geocode/json</URL>
    </HTTPTargetConnection>
</ServiceCallout>

假设我必须访问受用户名/密码保护的资源。如何将基本授权添加到此策略以使我能够做到这一点?

4

4 回答 4

2

在我们的项目中,KeyValueMaps用于在组织级别存储基本身份验证信息。使用KeyValueMap 策略检索授权信息,并将其作为基本身份验证标头添加到请求消息中。

看看这种方法是否适合你。

于 2014-01-16T15:12:19.637 回答
2

要为您的服务标注添加基本身份验证标头,您可以使用“AssignMessage”策略在“GeocodingRequest”中设置“授权”标头,如下所示:

<AssignMessage enabled="true" continueOnError="true" async="false" name="AssignAuthorizationHeaderPolicy">
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="true" transport="http" type="request">GeocodingRequest</AssignTo>
     <Add>
        <Headers>
            <Header name="Authorization">Basic YourAuthenticationHeader</Header>
        </Headers>
    </Add>
</AssignMessage>

创建此策略后,您需要在 proxy.xml 中的 serviceCallout 之前将其附加到请求流中作为流:

            <Step>
                <FaultRules/>
                <Name>AssignAuthorizationHeaderPolicy</Name>
            </Step>
            <Step>
                <FaultRules/>
                <Name>GeoCodeClient</Name>
            </Step>
于 2014-01-16T15:14:21.127 回答
0

添加到已经说过的内容,如果您需要 base64 编码(如果您使用基本授权,您可能会这样做),您需要执行脚本标注。例如,您可以使用以下 Python:

import base64

if (client_secret is not None): 
 data = client_id + ":" + client_secret
 header_value = base64.b64encode(data)
 header_value = "Basic " + header_value
 flow.setVariable("request.header.Authorization", header_value)

JS 会有点棘手,因为您需要包含适当的库,但我相信 SO 有更多的例子可以遵循。

于 2014-01-16T22:46:29.563 回答
0

使用键值映射以安全的方式存储敏感数据

Step 1)Use below API to Create/Update the key Value maphttps://api.enterprise.apigee.com/v1/o/{orgname}/environments/{env}/keyvaluemaps Body:-{
  "entry" : [ {
    "name" : "basic_auth_system1",
    "value" : "Basic XXXXXXXXXXX"
  } ],
  "name" : "system1_credentials"
}
Step 2) Policy used to lookup The key Value map 

<KeyValueMapOperations enabled="true" continueOnError="false" async="false" name="keymap_get_credentials" mapIdentifier="system1_credentials">
    <DisplayName>keymap_get_credentials</DisplayName>
    <FaultRules/>
    <Properties/>
    <ExpiryTimeInSecs>-1</ExpiryTimeInSecs>
    <Get assignTo="basic_auth_system1">
        <Key>
            <Parameter>basic_auth_system1</Parameter>
        </Key>
    </Get>
    <Scope>environment</Scope>
</KeyValueMapOperations>
于 2014-01-22T07:11:36.287 回答