Oracle SOA:BEPL-使用远程令牌提供者调用服务

问题描述

我面临配置Oracle 11g SOA Suite BPEL来正确调用由WSS STS SAML2.0令牌保护的远程SOAP Web服务的困难。我对STS身份验证与SOAP的工作方式有一个大致的了解,但是我从来没有手动调用过,并且始终依靠框架来解决这一问题。

对于此配置,我有三台服务器:

  • 服务器A:“我们的” Oracle WebLogic服务器
  • 服务器B:“其” WebService服务器
  • 服务器C:“他们的” STS信任服务器

我应该能够以某种方式向服务器C发送用户名和密码,检索安全令牌,向服务器B发出请求,以提供安全令牌和消息签名。 远程服务器的WSDL绑定为令牌和签名指定了确切的详细信息。

我不知如何指定服务器C的地址和位置,以及如何指示BPEL流程的调用步骤以提供令牌和签名以及指向服务器B的SOAP消息。

我现在正在考虑编写.NET Web服务器以充当代理并作为最后的手段来处理身份验证,因为我目前的研究没有任何结果。但是我相信这是有可能的,真的希望有一些技巧或参考。


我准备了以下.NET ServiceModel配置来调用服务器B的服务,它非常适合我的.NET应用程序。

<bindings>
    <ws2007FederationHttpBinding>
        <binding name="ws2007FederationBinding">
            <security mode="TransportWithMessageCredential">
                <message establishSecurityContext="false">
                    <issuer address="https://[Server C]/..../trust/13/usernamemixed" binding="ws2007HttpBinding" bindingConfiguration="usernameMixed" />
                    <issuerMetadata address="https://[Server C]/..../trust/mex" />
                    <claimTypeRequirements>
                        <add claimType="http://www.oasis-open.org/RSA2004/attributes/AUTHORITY" isOptional="false"/>
                    </claimTypeRequirements>
                </message>
            </security>
        </binding>
    </ws2007FederationHttpBinding>
    <ws2007HttpBinding>
        <binding name="usernameMixed">
            <security mode="TransportWithMessageCredential">
                <message clientCredentialType="UserName" establishSecurityContext="false" />
            </security>
        </binding>
    </ws2007HttpBinding>
</bindings>
<client>
    <endpoint address="https://[Server B]/...." binding="ws2007FederationHttpBinding"
        bindingConfiguration="ws2007FederationBinding"
        contract="IServerBService" name="ServerBService" />
</client>

如何为SOA Composite中的外部引用配置等效绑定?我什至不确定这样的配置在哪里?是在composite.xml还是*.componentType文件中?由于它是全局绑定,因此我猜想它应该位于composite.xml中的某个位置,但是我找不到任何引用来提供详尽的可接受参数列表来配置这样的东西。您能否提供示例或指向适当的文档?


在docs.oracle.com上花费了许多时间之后,我突然顿悟了-首先,我需要在composite.xml的引用绑定中附加以下安全策略:

<wsp:PolicyReference URI="oracle/wss_sts_issued_saml_bearer_token_over_ssl_client_policy"
                           orawsp:category="security" orawsp:status="enabled"/>

这指示WebLogic Server在调用合作伙伴链接之前需要身份验证令牌。

然后,我需要基于oracle/sts_trust_config_client_policy模板创建安全配置策略,该模板使我可以为远程信任STS指定端点和元数据URI,就像在.NET App.config中一样。 为此,我想到了这个出色的策略文件

<wsp:Policy xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" 
            xmlns:orawsp="http://schemas.oracle.com/ws/2006/01/policy" 
            xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" 
            Name="oracle/MyCustom_sts_trust_config_client_policy" 
            orawsp:attachTo="binding.any" 
            orawsp:category="security" 
            orawsp:description="" 
            orawsp:local-optimization="off" 
            orawsp:provides="{http://schemas.oracle.com/ws/2006/01/policy}SOAP_HTTP,{http://schemas.oracle.com/ws/2006/01/policy}SOAP_JMS" 
            orawsp:status="enabled" 
            orawsp:subjectCount="1" 
            orawsp:versionCreator="weblogic" 
            orawsp:versionNumber="4" 
            orawsp:versionTime="1603386787828" 
            wsu:Id="MyCustom_sts_trust_config_client_policy">
    <orasp:sts-trust-config 
            xmlns:orasp="http://schemas.oracle.com/ws/2006/01/securitypolicy" 
            orasp:policy-reference-uri="https://[Server C]/..../trust/mex" 
            orasp:port-endpoint="http://schemas.microsoft.com/ws/2008/06/identity/securitytokenservice#wsdl.endpoint(SecurityTokenService/UserNameWSTrustBinding_IWSTrust13Sync)" 
            orasp:port-uri="https://[Server C]..../trust/13/usernamemixed" 
            orasp:soap-version="12" orasp:sts-keystore-recipient-alias="sts-csf-key" 
            orasp:wsdl-uri="https://[Server C]/....?WSDL" 
            orawsp:Enforced="true" 
            orawsp:Silent="true" 
            orawsp:category="security/sts-config" 
            orawsp:name="Security Token Service Trust Configuration">
        <orawsp:bindings>
            <orawsp:Config orawsp:configType="declarative" orawsp:name="StsTrustConfig">
                <orawsp:PropertySet orawsp:name="standard-security-properties">
                    <orawsp:Property orawsp:contentType="constant" orawsp:name="role" orawsp:type="string">
                        <orawsp:Value>ultimateReceiver</orawsp:Value>
                    </orawsp:Property>
                    <orawsp:Property orawsp:contentType="optional" orawsp:name="reference.priority" orawsp:type="string"/>
                </orawsp:PropertySet>
            </orawsp:Config>
        </orawsp:bindings>
    </orasp:sts-trust-config>
</wsp:Policy>

但是,当尝试调用外部服务时,它仍然失败并显示错误

got FabricInvocationException
Supplemental Detail java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty

如果您能分享您的专业知识并帮助我克服学习上的障碍,我将不胜感激。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)