【问题标题】:How to add basic auth to a service callout policy如何将基本身份验证添加到服务调出策略
【发布时间】:2018-02-08 20:05:48
【问题描述】:

这是服务调出政策:

<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>

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

【问题讨论】:

标签: basic-authentication apigee


【解决方案1】:

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

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

【讨论】:

  • 最好在这里提供一个基本示例,因为文档网址将来可能会发生变化。
  • 不确定我是否理解,尽管我将其表述为解决问题的一种方式。这是问题作者提出的问题的解决方案之一。请让我知道你的想法。
【解决方案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>

【讨论】:

    【解决方案3】:

    添加到已经说过的内容,如果您需要 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 有更多示例可供参考。

    【讨论】:

      【解决方案4】:

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

      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>
      

      【讨论】:

        猜你喜欢
        • 2011-06-10
        • 2021-01-26
        • 1970-01-01
        • 1970-01-01
        • 2018-06-03
        • 1970-01-01
        • 2016-05-31
        • 2011-08-13
        • 1970-01-01
        相关资源
        最近更新 更多