Настройте WCF для WS-Security с именем пользователя через https - PullRequest
2 голосов
/ 28 декабря 2010

Я пытаюсь вызвать веб-службу с поддержкой WS-Security на основе Java через https с помощью клиента WCF и, похоже, не могу правильно настроить параметры безопасности. Используя SvcTraceViewer, я не вижу ожидаемого заголовка безопасности ни с одной из конфигураций безопасности, которые я пробовал.

Моя последняя конфигурация безопасности:

    <wsHttpBinding>
        <binding name="MySoapBinding" closeTimeout="00:01:00"
            openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
            allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
            maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
            messageEncoding="Text" textEncoding="utf-8"
            useDefaultWebProxy="true">
            <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          <security mode="TransportWithMessageCredential">
            <transport/>
            <message clientCredentialType="UserName" negotiateServiceCredential="false" establishSecurityContext="false"/>
          </security>
        </binding>
    </wsHttpBinding>

и я установил имя пользователя / пароль в коде так:

    svc.ClientCredentials.UserName.UserName = TestBase.userName;
    svc.ClientCredentials.UserName.Password = TestBase.password;

Веб-служба Java ожидает заголовок безопасности, подобный следующему:

<wsse:Security soap:mustUnderstand="1">
<wsu:Timestamp wsu:Id="Timestamp-bf41c571-7d32-438c-937e-7d83a3ac2d14">
<wsu:Created>2010-12-27T16:43:16Z</wsu:Created>
<wsu:Expires>2010-12-27T16:48:16Z</wsu:Expires>
</wsu:Timestamp>
<wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="SecurityToken-4c9b30b1-d697-4c64-89cb-a6d7e857aebf">
<wsse:Username>MyUserName</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">MyPassword</wsse:Password>
<wsse:Nonce>pzLdD4S+OCDG6Ut9Ur1oOQ==</wsse:Nonce>
<wsu:Created>2010-12-27T16:43:16Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>

Я вообще не вижу заголовка Security.

Я довольно много читал в Интернете о режимах защиты и безопасности на уровне транспорта и сообщений, но, похоже, не могу найти правильный набор опций. Как мне настроить привязку для

  • https связь
  • Имя пользователя / пароль в заголовке SOAP, в виде простого текста (WS-Security)
  • Требуется отметка времени
  • Требуется одноразовый номер

1 Ответ

3 голосов
/ 29 декабря 2010

Оказывается, у Рика Строля была почти та же проблема.Оказывается, что SvcTraceViewer не показывает фактическое сообщение на проводе.Тем не менее, его блог описывает процедуру прокси через Чарльза (или, в моем случае, Fiddler 2, который бесплатен), чтобы увидеть реальное сообщение.

Оказывается, я отправляю элемент Timestamp в соответствии с требованиямивеб-сервис, которому я звоню, но если я это сделаю, WCF требует в ответе метку времени (которую я не получаю).Сообщение об ошибке вводит в заблуждение.К счастью, я могу изменить службу для возврата метки времени.

http://www.west -wind.com / weblog / posts / 205198.aspx

...