错误:未强制执行用户名令牌创建的策略

Posted

技术标签:

【中文标题】错误:未强制执行用户名令牌创建的策略【英文标题】:Error : Username Token Created policy not enforced 【发布时间】:2016-08-13 16:03:43 【问题描述】:

我正在开发基于 CXF 的服务和客户端。 并使用 wsdl 中定义的策略文件在服务器端实现用户名密码安全。这是配置:

<wsp:Policy wsu:Id="policy.Security" xmlns:wsp="http://www.w3.org/ns/ws-policy">
  <wsp:ExactlyOne>
    <wsp:All>
        <sp:SupportingTokens>
            <wsp:Policy>
                <sp:UsernameToken
                        sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient"
                    wsp:Optional="false" wsp:Ignorable="false">
                    <wsp:Policy>
                        <sp:WssUsernameToken10 />
                        <sp13:Created />
                        <sp13:Nonce />
                    </wsp:Policy>
                </sp:UsernameToken>
            </wsp:Policy>
        </sp:SupportingTokens>
    </wsp:All>
  </wsp:ExactlyOne>
</wsp:Policy>

客户端配置:

<jaxws:client
    xmlns:tns="http://ws.soa.com/service/offer/XYZ/"
    name="XYZPort" address="$xyz.endPoint"
    serviceClass="com.soa.ws.service.offer.XYZ.XYZPortType"
    wsdlLocation="$xyz.wsdlLocation" serviceName="tns:xyzService" >
    <jaxws:properties>
        <entry key="ws-security.username" value="$xyz.auth.username" />
        <entry key="ws-security.callback-handler" value-ref="xyzPasswordCallback" />
    </jaxws:properties>
    <jaxws:inInterceptors>
    <ref bean="logInBound" />
    </jaxws:inInterceptors>
    <jaxws:outInterceptors>
    <ref bean="logOutBound" />      
    </jaxws:outInterceptors>
</jaxws:client>

在尝试访问服务时收到以下错误:

原因:javax.xml.ws.soap.SOAPFaultException:无法满足这些策略替代方案: http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702UsernameToken:用户名令牌创建的策略未强制执行 在 org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:157)

谁能指导一下如何解决这个问题?

【问题讨论】:

看起来它需要 wsse:created 和 wsse:Nonce 在soap请求中。不知道如何填充它们。 都是防重放攻击措施。 wsu:Created 是请求时间戳wsse:Nonce 是请求的唯一 ID。它们的格式在文档中描述:docs.oasis-open.org/ws-sx/ws-securitypolicy 【参考方案1】:

您可能使用的是旧版本的 CXF。此处已修复:

https://issues.apache.org/jira/browse/CXF-6051

【讨论】:

以上是关于错误:未强制执行用户名令牌创建的策略的主要内容,如果未能解决你的问题,请参考以下文章

未强制执行 Azure 策略

未强制执行 Java 安全策略

基于 Keycloak ABAC 的策略执行器,无需在令牌中添加属性

在可能存在多个选项的情况下,如何创建策略以强制标记?

iframe、跨域 cookie、p3p 策略和 safari 错误:未提供所需的防伪令牌或无效

如何解决 authjs 上的用户未定义错误