This site contains the documentation that is relevant to older WSO2 product versions and offerings.
For the latest WSO2 documentation, visit https://wso2.com/documentation/.

Enabling HTTP Basic Authentication through a Proxy Server

If WSO2 ESB is behind a firewall, your proxy service might need to talk to a server through a proxy server, which might require HTTP basic authentication.

To configure the ESB to communicate with the proxy server:

  1. In <PRODUCT_HOME>/repository/conf/axis2/axis2.xml, edit the transportSender configuration of the http transport to specify the proxy server as follows:

    <transportSender name="http" class="org.apache.synapse.transport.passthru.PassThroughHttpSender">
    	<parameter name="non-blocking" locked="false">true</parameter>
    	<parameter name="http.proxyHost" locked="false">localhost</parameter>
    	<parameter name="http.proxyPort" locked="false">8080</parameter>
    </transportSender>
  2. In the Synapse configuration of the proxy service that sends messages to this proxy server, set the following two properties before the send mediator:

    <syn:property name="Proxy-Authorization" expression="fn:concat('Basic ', base64Encode('userName:password'))" scope="transport"/>
    <syn:property name="POST_TO_URI" value="true" scope="axis2"/>

    The first property sets the Proxy-Authorization HTTP transport header with the base64 encoded user name and password as expected by the HTTP basic authentication. The second property makes the outgoing URL a complete URL understandable by the proxy server.

For example, in normal scenarios the outgoing request is sent as following:

POST /services/SimpleStockQuoteService HTTP/1.1

But the proxy server requires sending the actual URL:

POST [http://localhost:9000/services/SimpleStockQuoteService] HTTP/1.1

Following is a sample proxy service configuration that sets these two properties:

<syn:proxy name="StockQuoteProxy" startOnLoad="true">
	<syn:target>
		<syn:inSequence>
			<syn:property name="Proxy-Authorization" expression="fn:concat('Basic ', base64Encode('supun:test123'))" scope="transport"/>
			<syn:property name="POST_TO_URI" value="true" scope="axis2"/>
			<syn:send>
				<syn:endpoint name="endpoint_urn_uuid_379C485AD3CB65037F10216600509076498395882">
					<syn:address uri="http://localhost:9000/services/SimpleStockQuoteService"/>
				</syn:endpoint>
			</syn:send>
		</syn:inSequence>
		<syn:outSequence>
			<syn:send/>
		</syn:outSequence>
	</syn:target>
	<syn:publishWSDL uri="file:repository/samples/resources/proxy/sample_proxy_1.wsdl"/>
</syn:proxy>