ASMX Web服务支持使用安全令牌的身份验证。我要求提供以下代码的服务:
service = new WebService();
UsernameToken token = new UsernameToken( txtAccount.Text + @"\" + txtUser.Text, txtPass.Text, PasswordOption.SendHashed );
service.RequestSoapContext.Security.Tokens.Add( token );
service.RequestSoapContext.Security.Elements.Add( new MessageSignature( token ) );
// this method does nothing but throws an exception if login info is incorrect
service.LoginCheck();
当我使用此代码连接到服务时,它工作正常,但是当我尝试使用SOAP UI连接到服务时,它返回The security token could not be authenticated or authorized
错误。
使用Fiddler,我发现上面代码中的请求包含一个如下所示的签名:
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#hmac-sha1" />
<Reference URI="#Id-e9745eb3-b703-437d-8775-adc4d215e471">
<Transforms>
<Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
<DigestValue>**************************</DigestValue>
</Reference>
...
</SignedInfo>
<SignatureValue>***********************</SignatureValue>
<KeyInfo>
<wsse:SecurityTokenReference>
<wsse:Reference URI="#SecurityToken-60491cfd-04ba-4877-aff1-f0bc16e1f178" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#UsernameToken" />
</wsse:SecurityTokenReference>
</KeyInfo>
</Signature>
我尝试使用keytool
使用不同的选项来创建JKS密钥库,并将创建的密钥库添加到WS-Security配置中,但是未添加Singnature,或者为{{ 1}},Algorithm
和CanonicalizationMethod
。
我应该在SOAP UI中设置哪些选项以连接到Web服务?