我是WSO2 esb的新手,我还在评估它。我正在尝试使用OAuth保护的Web服务。在我的序列中,我创建了一个像这个片段的中介OAuth:
<?xml version="1.0" encoding="UTF-8"?>
<sequence name="test-consume-oauth_v1" xmlns="http://ws.apache.org/ns/synapse">
<in>
<property expression="json-eval($.)" name="test-consume-oauth_v1 Body_received" scope="default" type="STRING" />
<oauthService xmlns="http://ws.apache.org/ns/synapse" password="xxx"
remoteServiceUrl="https://myserver.com/token" username="xxx"/>
<call>
<endpoint key="test_OAUTH_v1"/>
</call>
<script language="js"><![CDATA[var srvResponse = mc.getPayloadJSON();
mc.setProperty('srvResponse', srvResponse);]]></script>
<log>
<property expression="json-eval($.)" name="test-consume-oauth_v1 response "/>
</log>
<script language="js"><![CDATA[var log = mc.getServiceLog();
mc.setPayloadJSON(mc.getProperty('srvResponse'));
]]></script>
<respond />
</in>
<out>
<send />
<drop />
</out>
</sequence>
但它仍然显示此错误:
MessageID: urn:uuid:ba554008-3b7c-4a96-875b-d04cc8fa179b, Direction: request, MESSAGE = Executing default 'fault' sequence, ERROR_CODE = 0, ERROR_MESSAGE = Not a valid OAuth Request, Envelope: <?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"><soapenv:Body/></soapenv:Envelope> {org.apache.synapse.mediators.builtin.LogMediator}
当我尝试使用cURL命令行时,它没有问题:
curl -X GET --header "Accept: application/json" --header "Authorization: Bearer 3ef47ff9ae9f0600aa279a0f77ddfdf" "https://myserver.com/ws-test" -k
总结我如何在Wso2 esb中执行与cURL命令行相同的操作?
祝你好运
答案 0 :(得分:0)
我使用像
那样的中介头<header name="Authorization" scope="transport" value="3ef47ff9ae9f0600aa27efd6565" />
<call>
<endpoint key="test_OAUTH_v1"/>
</call>
....
这很好用。但问题是令牌的生命周期很短,所以我必须存储当前令牌,如果它无效,我必须要求一个新的有效令牌。我认为wso2esb做了这个过程,但我不知道如何处理。
你有什么建议吗?
答案 1 :(得分:0)
oauth mediator用于使用oauth保护不安全的后端。在您的情况下,您的后端已经被oauth保护,您需要通过提供oauth令牌来调用通过esb备份的后端。您需要使用密码授予类型动态生成oauth令牌并使用它来调用后端的位置。因此,您可以按照序列中的以下步骤来实现此目的
<property name="grant_type" value="password" scope="default" type="STRING"/>
<property name="username" value="admin" scope="default" type="STRING"/>/>
<property name="password" value="xxxx" scope="default" type="STRING"/>/>
<payloadFactory media-type="xml">
<format>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<root>
<grant_type>$1</grant_type>
<username>$2</username>
<country>$3</country>
</root>
</soapenv:Body>
</soapenv:Envelope>
</format>
<args>
<arg evaluator="xml" expression="$ctx:grant_type"/>
<arg evaluator="xml" expression="$ctx:username"/>
<arg evaluator="xml" expression="$ctx:password"/>
</args>
</payloadFactory>
<property name="messageType" value="application/x-www-form-urlencoded" scope="axis2" type="STRING"/>
<property name="DISABLE_CHUNKING" value="true" scope="axis2" type="STRING"/>
一个。
<call>
<endpoint key="TokenEndpoint"/>
</call>
湾 从响应中提取令牌
℃。 使用标头介体
将标记设置为授权标头3.拨打实际的后端