2016-12-12 2 views
0

Я использую WSO2 API Manager 2.0 и настроил его для использования прокси, добавив следующую конфигурацию в axis2.xml и synapse.xml. Тем не менее, когда я пытаюсь получить доступ к тестовому API, который я создал, я получаю ошибки «Требуется авторизация прокси» или «Hangup сервера». Когда я попытался увидеть запросы, сделанные по проводу, я увидел, что было два запроса: запрос GET (который принимает ошибку Hangup сервера), который имеет заголовок прокси-аутентификации, и запрос CONNECT (который получает требуемую авторизацию прокси ошибка). Почему это происходит и как я могу сделать заголовок отображаемым в каждом запросе?Ошибка авторизации прокси в диспетчере API WSO2

axis2.xml:

<transportSender name="http" class="org.apache.synapse.transport.passthru.PassThroughHttpSender"> 
    <parameter name="non-blocking" locked="false">true</parameter> 
    <parameter name="http.proxyHost" locked="false">10.1.0.236</parameter> 
    <parameter name="http.proxyPort" locked="false">80</parameter> 
</transportSender> 

<transportSender name="https" class="org.apache.synapse.transport.passthru.PassThroughHttpSSLSender"> 
    <parameter name="non-blocking" locked="false">true</parameter> 
    <parameter name="http.proxyHost" locked="false">10.1.0.236</parameter> 
    <parameter name="http.proxyPort" locked="false">80</parameter> 
    <parameter name="keystore" locked="false"> 
     <KeyStore> 
      <Location>repository/resources/security/wso2carbon.jks</Location> 
      <Type>JKS</Type> 
      <Password>wso2carbon</Password> 
      <KeyPassword>wso2carbon</KeyPassword> 
     </KeyStore> 
    </parameter> 
    <parameter name="truststore" locked="false"> 
     <TrustStore> 
      <Location>repository/resources/security/client-truststore.jks</Location> 
      <Type>JKS</Type> 
      <Password>wso2carbon</Password> 
     </TrustStore> 
    </parameter> 
    <parameter name="HostnameVerifier">AllowAll</parameter> 
     <!--supports Strict|AllowAll|DefaultAndLocalhost or the default if none specified --> 
</transportSender> 

synapse.xml:

<definitions xmlns="http://ws.apache.org/ns/synapse"> 
    <sequence xmlns="http://ws.apache.org/ns/synapse" name="WSO2AM--Ext--In"> 
     <property name="Proxy-Authorization" expression="fn:concat('Basic ', base64Encode('smsapp:let$c0nnect'))" scope="transport"/> 
     <property name="POST_TO_URI" value="true" scope="axis2"/> 
     <property name="DISABLE_CHUNKING" value="true" scope="axis2"/> 
     <log level="custom"> 
      <property name="TRACE" value="Global Mediation Extension2"/> 
     </log> 
    </sequence> 
<!-- You can add any flat sequences, endpoints, etc.. to this synapse.xml file if you do 
*not* want to keep the artifacts in several files --> 
</definitions> 

Запросы и ответы:
GET

GET https://apiurl.com/api/apiname HTTP/1.1\r\n 
    [Expert Info (Chat/Sequence): GET https://apiurl.com/api/apiname HTTP/1.1\r\n] 
     [GET https://apiurl.com/api/apiname HTTP/1.1\r\n] 
     [Severity level: Chat] 
     [Group: Sequence] 
    Request Method: GET 
    Request URI: https://apiurl.com/api/apiname 
    Request Version: HTTP/1.1 
Proxy-Authorization: Basic XXXXXXXXXXXXXXXX\r\n 
    Credentials: username:pwd 


Hypertext Transfer Protocol 
HTTP/1.1 502 Server Hangup\r\n 
    [Expert Info (Chat/Sequence): HTTP/1.1 502 Server Hangup\r\n] 
     [HTTP/1.1 502 Server Hangup\r\n] 
     [Severity level: Chat] 
     [Group: Sequence] 
    Request Version: HTTP/1.1 
    Status Code: 502 
    Response Phrase: Server Hangup 
Date: Thu, 08 Dec 2016 12:12:20 GMT\r\n 
Connection: close\r\n 
Via: HTTPS/1.1 localhost.localdomain\r\n 
Cache-Control: no-store\r\n 
Content-Type: text/html\r\n 
Content-Language: en\r\n 
Content-Length: 666\r\n 
\r\n 
[HTTP response 1/1] 
[Time since request: 0.235017000 seconds] 
[Request in frame: 456] 
File Data: 666 bytes 

CONNECT

Hypertext Transfer Protocol 
    CONNECT apiurl.com:443 HTTP/1.1\r\n 
     [Expert Info (Chat/Sequence): CONNECT apiurl.com:443 HTTP/1.1\r\n] 
      [CONNECT apiurl.com:443 HTTP/1.1\r\n] 
      [Severity level: Chat] 
      [Group: Sequence] 
     Request Method: CONNECT 
     Request URI: apiurl.com:443 
     Request Version: HTTP/1.1 
    Host: apiurl.com:443\r\n 
    Proxy-Connection: Keep-Alive\r\n 
    \r\n 
    [Full request URI: apiurl.com:443] 
    [HTTP request 1/2] 
    [Response in frame: 595] 
    [Next request in frame: 880] 


Hypertext Transfer Protocol 
    HTTP/1.1 407 Proxy Authorization Required\r\n 
     [Expert Info (Chat/Sequence): HTTP/1.1 407 Proxy Authorization Required\r\n] 
      [HTTP/1.1 407 Proxy Authorization Required\r\n] 
      [Severity level: Chat] 
      [Group: Sequence] 
     Request Version: HTTP/1.1 
     Status Code: 407 
     Response Phrase: Proxy Authorization Required 
    Date: Thu, 08 Dec 2016 12:12:22 GMT\r\n 
    Proxy-Connection: keep-alive\r\n 
    Via: 1.1 localhost.localdomain\r\n 
    Cache-Control: no-store\r\n 
    Content-Type: text/html\r\n 
    Content-Language: en\r\n 
    Proxy-Authenticate: Basic realm="Websense Content Gateway"\r\n 
    Content-Length: 666\r\n 
    \r\n 
    [HTTP response 1/2] 
    [Time since request: 0.002752000 seconds] 
    [Request in frame: 589] 
    [Next request in frame: 880] 
    [Next response in frame: 894] 
    File Data: 666 bytes 

ответ

0

Вот решение, которое работало для меня (я использую ESB 5.0.0, не API Manager).

В моем случае мне пришлось добавить proxyProfiles в мой HTTP и HTTPS-отправитель по оси 2. Так что мне пришлось:

  1. Удаление параметров прокси в HTTP и HTTPS отправитель:

    <parameter name="http.proxyHost" locked="false">some_host</parameter> 
    <parameter name="http.proxyPort" locked="false">some_port</parameter> 
    
  2. Добавить параметр ProxyProfiles как HTTP и HTTPS отправитель)

    <parameter name="proxyProfiles"> 
         <profile> 
          <targetHosts>*</targetHosts> 
          <proxyHost>some_host</proxyHost> 
          <proxyPort>some_port</proxyPort> 
          <proxyUserName>some_username</proxyUserName> 
          <proxyPassword>some_password</proxyPassword> 
         </profile> 
    </parameter> 
    
  3. В моем .xml API I удалил Proxy-Authorization и POST_TO_URI.

более

детали: Working with Proxy Servers (wso2.com)

редактировать: после нескольких более тестов кажется, что HTTP необходимо Proxy-Authorization и POST_TO_URI параметры в API, но HTTPS вместо них нужно proxyProfiles как я уже говорил раньше. Без этого невозможно позвонить в службу HTTPS.