我正在wso2 ESB中使用REST API来调用具有基本身份验证的另一项服务。
这是我的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>
我使用json POST来调用此REST API,如下所示:
{
'enrolment':'whatever',
'zone':'1'
}
如果我对用户名和密码进行了硬编码,它将很好地工作。但是我向前迈了一步。我需要传递带有用于在ESB中调用REST API的发布JSON的基本授权,或设置此API以通过GET / POST调用传递身份验证。
有人知道怎么做吗?这是我正在尝试但没有成功的方法:
在调用API(POST http:// esbUrl:8280 / api / deleteZoneFromEnrolment)之前,在我的应用程序中,我在Base64中编码了字符串“ user:password”,结果是类似“ cHJhYmF0aDpwcmFiYXRo”的内容。我这样更改我的API代码:
<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>
和POST json:
{
'enrolment':'whatever',
'zone':'1',
'user':'cHJhYmF0aDpwcmFiYXRo'
}
我终于解决了。这比我想的要容易,只需Basic Auth header
在我的应用程序内部(当我调用我的ESB API时)添加用户名和密码,凭据就可以通过我的API传递给外部服务。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句