【问题标题】:WebSphere Application Server 7 doesn't understand security header in a Web Service responseWebSphere Application Server 7 不理解 Web 服务响应中的安全标头
【发布时间】:2015-12-16 17:57:53
【问题描述】:

我有一个企业应用程序,它由运行在 WebSphere Application Server 7 上的 Web 服务客户端组成。

当我尝试使用该服务时,我收到一个响应(不是错误),其中包含我请求的数据,然后 WebSphere 引发以下异常:

javax.xml.ws.WebServiceException: org.apache.axis2.AxisFault: Must Understand check failed for header http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd : Security

WebService 使用用户名令牌进行身份验证,并且不使用消息级别保护。

我创建了我的自定义策略集(WS-Addressing 和 WS-Security),删除了消息级别保护,添加了带有用户名和密码的自定义绑定。

我使用 SoapUI 对此进行了测试,我从 Web 服务获得了与使用 WebSphere 时相同的响应(不是错误)。

我错过了什么?

【问题讨论】:

    标签: java web-services security websphere-7


    【解决方案1】:

    最可能的原因是附加的策略集未正确加载。

    附件是一个示例 ws-security 策略和绑定:

    <?xml version="1.0" encoding="UTF-8"?>
    <wsp:Policy xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200512" xmlns:spe="http://www.ibm.com/xmlns/prod/websphere/200605/ws-securitypolicy-ext" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xmi="http://schema.omg.org/spec/XMI/1.0" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
    
      <sp:SupportingTokens>
        <wsp:Policy  wsu:Id="request:uname_token">
          <sp:UsernameToken sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200512/IncludeToken/AlwaysToRecipient">
            <wsp:Policy>
              <sp:WssUsernameToken10/>
            </wsp:Policy>
          </sp:UsernameToken>
        </wsp:Policy>
      </sp:SupportingTokens>
      <sp:AsymmetricBinding>
        <wsp:Policy>
          <sp:IncludeTimestamp/>
        </wsp:Policy>
      </sp:AsymmetricBinding>
    
    </wsp:Policy>
    
    
    <?xml version="1.0" encoding="UTF-8"?>
    <securityBindings xmlns="http://www.ibm.com/xmlns/prod/websphere/200608/ws-securitybinding">
    
     <securityBinding name="application">
    
      <securityOutboundBindingConfig>
        <tokenGenerator name="gen_unametoken" classname="com.ibm.ws.wssecurity.wssapi.token.impl.CommonTokenGenerator">
          <valueType localName="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#UsernameToken" uri="" />
          <callbackHandler classname="com.ibm.websphere.wssecurity.callbackhandler.UNTGenerateCallbackHandler">
            <basicAuth userid="user1" password="security"/>
          </callbackHandler>
          <jAASConfig configName="system.wss.generate.unt"/>
          <securityTokenReference reference="request:uname_token"/>
        </tokenGenerator>
        <timestampExpires expires="PT5M"/>
      </securityOutboundBindingConfig>
    
      <securityInboundBindingConfig>
        <!-- No security defined on client inbound for this configuration -->
      </securityInboundBindingConfig>
    
     </securityBinding>
    
    </securityBindings>
    

    【讨论】:

      【解决方案2】:

      我找到了解决方案。问题在于消息级别保护。如果我打开它,问题就会消失。我只需要确保没有指定要加密的部分,因此消息本身不会被加密。

      【讨论】:

        猜你喜欢
        • 2013-02-14
        • 2011-09-23
        • 1970-01-01
        • 1970-01-01
        • 2013-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多