首页 > 解决方案 > WSO2 EI - 无法使用 OAuth 令牌设置 SOAP 标头

问题描述

我在 WSO2 EI 上配置了一个 WSDL 代理服务,它指向一个由 OAuth 保护的外部服务。

我的问题是,除了我所有的努力之外,我无法在我的服务调用上设置承载授权标头。服务端点总是返回“找不到 oauth 令牌”错误。我已经尝试过所有关于标头的 WSO2 教程和文档(使用 Header Mediator 和标头作为属性),但没有任何效果。

我的问题与类似,也没有答案。

WSDL 代理服务由 WCF .NET 应用程序使用,并且设置了 Bearer 标头。

这是 XML 配置:

<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
       name="WSDLProxy"
       startOnLoad="true"
       statistics="disable"
       trace="disable"
       transports="http">
    <target>
        <inSequence>
            <send>
                <endpoint>
                    <wsdl port="RegisterEndpoint"
                        service="RegisterService.serviceagent"
                        uri="[external-wsdl-uri]"/>
                </endpoint>
             </send>
         </inSequence>
         <outSequence>
            <send/>
         </outSequence>
    </target>
    <publishWSDL uri="[external-wsdl-uri]"/>    
</proxy>

标签: oauthbearer-tokenwso2ei

解决方案


在直通场景中,例如给定的 WSDL 代理服务示例,如果在客户端对“WSDLProxy”的请求中发送“Authorization”标头,它将被发送到后端服务。但是,如果您的客户端在自定义传输标头中发送 Bearer 令牌,则必须在后端调用之前将其设置为“授权”标头,如下所示。

...
 <inSequence>
    <property expression="get-property('transport', 'CUSTOM-Bearer')" name="Authorization" scope="transport" type="STRING"/>
    <property action="remove" name="CUSTOM-Bearer" scope="transport"/>
    <send>
        <endpoint>
            <wsdl port="RegisterEndpoint"
                service="RegisterService.serviceagent"
                uri="[external-wsdl-uri]"/>
        </endpoint>
     </send>
 </inSequence>
...


推荐阅读