Веб-сервис ASMX поддерживает аутентификацию с использованием токенов безопасности.Я запрашиваю сервис со следующим кодом:
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>
Я пытался создать хранилище ключей JKS с keytool
с использованием других параметров и добавил созданное хранилище ключей в конфигурации WS-Security, но Singnature либо не был добавлен, либо имел другие значения Algorithm
для CanonicalizationMethod
, SignatureMethod
и DigestMethod
.
Какие параметры я должен установить в пользовательском интерфейсе SOAP для подключения к веб-службе?