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

サービス コールアウトに基本認証ヘッダーを追加するには、次のように「GeocodingRequest」で「Authorization」ヘッダーを設定する「AssignMessage」ポリシーを使用できます。

<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 に答える