powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Аутентификация на сервисе по UsernameToken - нужен PasswordDigest вместо PasswordText
3 сообщений из 3, страница 1 из 1
Аутентификация на сервисе по UsernameToken - нужен PasswordDigest вместо PasswordText
    #38661851
Фотография Bator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите как настроить аутентификацию на java веб-сервисе по UsernameToken - нужен PasswordDigest вместо PasswordText.
Net4.0

На сервис уходит

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
<soapenv:Envelope ...>
  <s:Header>
    ...
  </s:Header>
  <soapenv:Body>
    ...
  </soapenv:Body>
</soapenv:Envelope>

У меня сейчас получается так (сниффером получил):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
  <s:Header>
    <ActivityId CorrelationId="5bc9b16a-c77c-411d-bd74-daded7988de1" xmlns=" http://schemas.microsoft.com/2004/09/ServiceModel/Diagnostics">843cfdad-6891-439e-aa1b-eb811d0c3d5f</ActivityId> 
    <o:Security s:mustUnderstand="1" xmlns:o=" http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> 
      <u:Timestamp u:Id="_0">
        <u:Created>2014-06-04T13:46:05.101Z</u:Created>
        <u:Expires>2014-06-04T13:51:05.101Z</u:Expires>
      </u:Timestamp>
      <o:UsernameToken u:Id="uuid-a73d0d22-4b99-4739-9439-352e5e8f0c73-1">
        <o:Username>XX</o:Username>
        <o:Password Type=" http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0# PasswordText">XXXX</o:Password>
      </o:UsernameToken>
    </o:Security>
  </s:Header>

А должно быть примерно так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
  <soapenv:Header>
    <wsse:Security xmlns:wsse=" http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"  xmlns:wsu=" http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> 
      <wsse:UsernameToken wsu:Id="UsernameToken-BA4BAEFA397054753514018919701993">
        <wsse:Username>XX</wsse:Username>
        <wsse:Password Type=" http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0# PasswordDigest">bHbVylUKBb9d6ulsLEuS3scSk4I=</wsse:Password>
        <wsse:Nonce EncodingType=" http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">9P5fQM0q6b3honKflB9r7Q==</wsse:Nonce> 
        <wsu:Created>2014-06-04T14:26:10.199Z</wsu:Created>
      </wsse:UsernameToken>
    </wsse:Security>
  </soapenv:Header>

Код: plaintext
1.
2.
3.
  <soapenv:Body>
    ...
  </soapenv:Body>
</soapenv:Envelope>

Настройка в Web.config выглядит так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
  <basicHttpBinding>    
    <binding name="Contract_savePort" closeTimeout="00:01:00"
       openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
       allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
       maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
       messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
       useDefaultWebProxy="true">
     <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
       maxBytesPerRead="4096" maxNameTableCharCount="16384" />
     <security mode="TransportWithMessageCredential">
       <transport clientCredentialType="None" proxyCredentialType="None"
         realm="" />
       <message clientCredentialType="UserName" algorithmSuite="Default" />
     </security>
    </binding>
  </basicHttpBinding>    
  
   <endpoint address=" https://interplat.xxxx.ru/cxf/Contract" 
     binding="basicHttpBinding" bindingConfiguration="Contract_savePort"
     contract="ws_save.save" name="savePort" />  

Код вызова такой (в моем Main.asmx.cs):

Код: c#
1.
2.
3.
4.
5.
  saveClient serv = new saveClient("savePort");
  serv.ClientCredentials.UserName.UserName = "XX";
  serv.ClientCredentials.UserName.Password = "XXXX";
  ...
  ContractResponse resp = serv.Contract(req);
...
Рейтинг: 0 / 0
Аутентификация на сервисе по UsernameToken - нужен PasswordDigest вместо PasswordText
    #38662327
Фотография Bator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Аутентификация на сервисе по UsernameToken - нужен PasswordDigest вместо PasswordText
    #38670562
Фотография Bator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BatorНашел решение:
http://weblog.west-wind.com/posts/2012/Nov/24/WCF-WSSecurity-and-WSE-Nonce-Authentication

Но там есть ошибка:
nonce кодируется в Base64 и потом это nonce-в-Base64 хэшируется вместе с временем и паролем
а нужно хэшировать nonce не в Base64.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Аутентификация на сервисе по UsernameToken - нужен PasswordDigest вместо PasswordText
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]