如何使用由OAuth保护的web服务?

如何使用由OAuth保护的web服务?,oauth,wso2,wso2esb,Oauth,Wso2,Wso2esb,我对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="

我对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>
总结一下我如何在Wso2 esb中像cURL命令行一样执行相同的操作


致以最诚挚的问候

我这样使用mediator标题

<header name="Authorization" scope="transport" value="3ef47ff9ae9f0600aa27efd6565" />

<call>
       <endpoint key="test_OAUTH_v1"/>
</call>
 ....

....
这很好用。但问题是令牌的生存期很短,因此我必须存储当前令牌,如果它无效,我必须请求一个新的有效令牌。我认为wso2esb可以完成这个过程,但我不知道如何处理


您有什么建议吗?

oauth中介用于使用oauth保护不安全的后端。在您的情况下,您的后端已经由oauth保护,您需要通过提供oauth令牌通过esb调用该后端。您需要使用密码授权类型动态生成oauth令牌,并使用它调用后端。因此,您可以按照以下步骤来实现这一点

  • 使用负载工厂中介器为令牌端点创建负载。 令牌端点的有效负载-“授权类型=密码&用户名=管理员&密码=xxx”
  • 
    /> 
    /> 
    $1 
    $2 
    $3                                
    
    启用wirelogs并检查来自ESB的请求是否正确。您能否将向ESB发出的请求(正文、http头)发布到问题中?根据错误,它表示不是有效的oauth请求,请确保您发送oauth令牌头'Authorization:Bearer xxxxx's。我尝试了您的代码,但它不起作用
    curl -X GET --header "Accept: application/json" --header "Authorization: Bearer 3ef47ff9ae9f0600aa279a0f77ddfdf" "https://myserver.com/ws-test" -k
    
    <header name="Authorization" scope="transport" value="3ef47ff9ae9f0600aa27efd6565" />
    
    <call>
           <endpoint key="test_OAUTH_v1"/>
    </call>
     ....