WebServicesClientProtocol在安全标头中将EncodingType添加到Nonce
类似的问题: 如何在WSE 3.0(.NET)中的UsernameToken的Nonce元素中添加EncodingType属性
我正在尝试修改由WebServicesClientProtocol
发送到服务的标头。
不幸的是,Microsoft的WSSE Username and Token Security Spec 1.1
的实现与标准不兼容,并且没有使用Nonce
发送EncodingType
。
在类似的问题我已经链接在顶部解决方案是禁用服务器上的EncodingType
validation,但我无法修改任何东西。
我已经将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中有一面旗帜可以关闭这个要求。 我们这样做了,现在能够沟通。