WebServicesClientProtocol在安全标头中将EncodingType添加到Nonce

类似的问题: 如何在WSE 3.0(.NET)中的UsernameToken的Nonce元素中添加EncodingType属性

我正在尝试修改由WebServicesClientProtocol发送到服务的标头。
不幸的是,Microsoft的WSSE Username and Token Security Spec 1.1的实现与标准不兼容,并且没有使用Nonce发送EncodingType

在类似的问题我已经链接在顶部解决方案是禁用服务器上的EncodingTypevalidation,但我无法修改任何东西。

我已经将WSDL导入为Web Reference,我已将基类更改为WebServicesClientProtocol

然后在我的代码里面我这样做:

 var client = new QueryClient(); SoapContext requestContext = client.RequestSoapContext; requestContext.Security.Timestamp.TtlInSeconds = 60; var userToken = new UsernameToken(_userName, _password, PasswordOption.SendHashed); requestContext.Security.Tokens.Add(userToken); X509SecurityToken signatureToken = GetSecurityToken(); requestContext.Security.Tokens.Add(signatureToken); MessageSignature sig = new MessageSignature(signatureToken); requestContext.Security.Elements.Add(sig); client.SetClientCredential(signatureToken); client.SetClientCredential(new UsernameToken(_userName, _password, PasswordOption.SendHashed)); 

这创建了几乎理想的请求,但Nonce没有得到EncodingType

  ws_test_user XrFybEBGGqAIp2ybV6BbAdGa01U= gXsJgA6vV/HwY4pew9pi9Q== 2017-02-03T12:17:57Z  

Nonce必须具有以下属性: EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary"

如何添加此属性? 我想避免手动创建请求,因为我必须指定Username,Password,BinarySecurityToken和Signature。 Microsoft.Web.Services3正在为我创建所有必需的元素,缺少的是该属性。

编辑:

这是我正在尝试创建的请求:

     my_login XqEwZ/CxaBfFvh487TjvN8qD63c= JzURe0CxvzRjmEcH/ndldw== 2017-02-09T09:42:27.976Z  MIIKnDCCB.........nmIngeg6d6TNI=              mlABQuNUFOmLqsDswxXxQ6XnjpQ=   lYhBHSQ/L...XL1HEbMQjJ/Q2Rvg==            27467     

我已将我的请求发送给服务创建者,他确认我需要的是Nonce中的EncodingType属性

EncodingType标志符合WSSE用户名和令牌安全规范1.1,这是此Java Web服务正在使用的Apache CXF框架版本所需的规范。 .NET不符合该规范。 幸运的是,CXF中有一面旗帜可以关闭这个要求。 我们这样做了,现在能够沟通。