productos - protocolo wso2
Pasar nombre de usuario y contraseƱa a una API REST en WSO2 ESB (1)
Finalmente resolví. Es más fácil de lo que pensaba, simplemente Basic Auth header
dentro de mi aplicación (cuando estoy llamando a mi API de ESB) con nombre de usuario y contraseña, y las credenciales están pasando a través de mi API al servicio externo.
Estoy usando una API REST en wso2 ESB para llamar a otro servicio con autenticación básica.
Este es mi código API:
<resource methods="POST" uri-template="/deleteZoneFromEnrolment/">
<inSequence>
<property xmlns:ns="http://org.apache.synapse/xsd" name="Authorization" expression="fn:concat(''Basic '', base64Encode(''user:password''))" scope="transport"></property>
<property name="DISABLE_CHUNKING" value="true" scope="axis2"></property>
<payloadFactory media-type="xml">
<format>
<enr:DeleteZoneFromEnrolment xmlns:enr="http://someURL/Enrolment.xsd">
<Enrolment>$1</Enrolment>
<Zone>$2</Zone>
</enr:DeleteZoneFromEnrolment>
</format>
<args>
<arg evaluator="json" expression="$.enrolment"></arg>
<arg evaluator="json" expression="$.zone"></arg>
</args>
</payloadFactory>
<send>
<endpoint key="dev_enrolmentEndpoint"></endpoint>
</send>
<log level="full"></log>
</inSequence>
<outSequence>
<property name="messageType" value="application/json" scope="axis2" type="STRING"></property>
<send></send>
</outSequence>
<faultSequence>
<sequence key="esb_error_handling_response"></sequence>
</faultSequence>
Llamo a esta API REST usando un POST json como este:
{
''enrolment'':''whatever'',
''zone'':''1''
}
Si codigo el usuario y la contraseña, funciona bien. Pero voy un paso adelante. Necesito pasar esta Autorización Básica con un mensaje JSON que utilizo para llamar a la API REST en el ESB o configurar esta API para pasar la Autenticación a través de una llamada GET / POST.
Alguien sabe como hacerlo? Esto es lo que estoy intentando pero sin éxito:
En mi aplicación antes de llamar a mi API (POST http: // esbUrl: 8280 / api / deleteZoneFromEnrolment ), codigo en Base64 la cadena ''user: password'', el resultado es algo como esto: ''cHJhYmF0aDpwcmFiYXRo''. Cambio mi código API así:
<resource methods="POST" uri-template="/deleteZoneFromEnrolment/">
<inSequence>
<property xmlns:ns="http://org.apache.synapse/xsd" name="Authorization" expression="fn:concat(''Basic '', json-eval($.user))" scope="transport"></property>
<property name="DISABLE_CHUNKING" value="true" scope="axis2"></property>
<payloadFactory media-type="xml">
<format>
<enr:DeleteZoneFromEnrolment xmlns:enr="http://someURL/Enrolment.xsd">
<Enrolment>$1</Enrolment>
<Zone>$2</Zone>
</enr:DeleteZoneFromEnrolment>
</format>
<args>
<arg evaluator="json" expression="$.enrolment"></arg>
<arg evaluator="json" expression="$.zone"></arg>
<arg evaluator="json" expression="$.user"></arg>
</args>
</payloadFactory>
<send>
<endpoint key="dev_enrolmentEndpoint"></endpoint>
</send>
<log level="full"></log>
</inSequence>
<outSequence>
<property name="messageType" value="application/json" scope="axis2" type="STRING"></property>
<send></send>
</outSequence>
<faultSequence>
<sequence key="esb_error_handling_response"></sequence>
</faultSequence>
Y el POST JSON:
{
''enrolment'':''whatever'',
''zone'':''1'',
''user'':''cHJhYmF0aDpwcmFiYXRo''
}