将用户名和密码传递给WSO2 ESB中的REST API

时间:2016-02-08 12:14:29

标签: wso2 wso2esb esb

我在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'
}

如果我对用户和密码进行硬编码,它可以很好地工作。但我向前迈了一步。我需要使用JSON发送此基本授权,该JSON用于在ESB中调用REST API或设置此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'
}

1 个答案:

答案 0 :(得分:2)

我终于解决了。这比我想象的要容易,只需在我的应用程序中添加Basic Auth header(当我调用我的ESB API时)使用用户名和密码,并且凭据通过我的API传递给外部服务。