所以我构建了一个使用基本Auth Soap 1.2的服务。配置如下:
<customBinding>
<binding name="MyHttpBinding">
<security authenticationMode="UserNameOverTransport" securityHeaderLayout="Strict"
allowInsecureTransport="false">
<secureConversationBootstrap />
</security>
<textMessageEncoding messageVersion="Soap12" />
<httpsTransport maxReceivedMessageSize="6553600" authenticationScheme="Basic" maxBufferSize="6553600" />
</binding>
</customBinding>
我有多个客户端调用它(WCF和Java)。使用WCF客户端我没有任何问题,但使用Java客户端我在服务器端遇到以下异常:
System.ServiceModel.Security.MessageSecurityException安全性 处理器无法在消息中找到安全标头。这个 可能是因为该消息是一个不安全的错误或因为有 沟通各方之间的约束性不匹配。这可能发生 如果服务配置为安全性且客户端未使用 安全
我不知道如何解决这个问题。 系统需要使用基本身份验证,并且必须使用Soap 1.2(因此自定义绑定)。 我无法控制调用Java客户端,但我确信它使用基本的Auth调用该服务。
有什么建议吗?
答案 0 :(得分:1)
我不是Java专家,但据我所知,Java客户端无法动态实现SOAP 1.2。 Java客户端需要外部库来补充1.2 SOAP消息中必要的策略/安全头。
我已指示我的Java客户端使用Metro库以使用我的WCF服务。 (我正在使用与您类似的绑定。)以下是blog如何包含Metro库。
以下是interoperability的MSDN链接。
希望这有帮助!
答案 1 :(得分:0)
您需要配置java客户端以向服务器发送用户名令牌。打开Fiddler并将工作肥皂(wcf客户端)与非工作肥皂(java)进行比较