Как добавить базовую аутентификацию в политику вызова службы

Это политика вызова службы:

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

Допустим, мне нужно получить доступ к ресурсу, защищенному именем пользователя/паролем. Как мне добавить эту базовую авторизацию в эту политику, чтобы я мог это сделать?


person user1801279    schedule 16.01.2014    source источник
comment
Взгляните на этот ответ stackoverflow.com/a/21057641/808096   -  person Santanu Dey    schedule 06.02.2014


Ответы (4)


В нашем проекте KeyValueMaps используются для хранения базовой информации об аутентификации на уровне организации. Информация об авторизации извлекается с помощью политики KeyValueMap и добавляется в качестве основного заголовка аутентификации в сообщении запроса.

Посмотрите, работает ли этот подход для вас.

person Srikanth    schedule 16.01.2014
comment
Было бы идеально также привести здесь базовый пример, поскольку URL-адреса документов могут измениться в будущем. - person brandonscript; 16.01.2014
comment
Не уверен, что понимаю, хотя я сформулировал это как способ решить проблему. Это одно из решений проблемы, поставленной автором вопроса. Пожалуйста, поделись своими мыслями. - person Srikanth; 30.06.2014

Чтобы добавить заголовок Basic Authentication для вызова службы, вы можете использовать политику AssignMessage, которая устанавливает заголовок Authorization в 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>

После того, как вы создали эту политику, вам нужно будет прикрепить ее в потоке запросов перед serviceCallout в proxy.xml как потоки:

            <Step>
                <FaultRules/>
                <Name>AssignAuthorizationHeaderPolicy</Name>
            </Step>
            <Step>
                <FaultRules/>
                <Name>GeoCodeClient</Name>
            </Step>
person Brajesh    schedule 16.01.2014

чтобы добавить к тому, что уже было сказано, если вам нужна кодировка 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 есть еще много примеров для этого.

person akoo1010    schedule 16.01.2014

Использование Key Value Map для безопасного хранения конфиденциальных данных

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>
person randomness    schedule 22.01.2014