Почему wcf не позволяет без модуля http аутентификацию имени пользователя / пароля в режиме безопасности транспорта - PullRequest
1 голос
/ 24 ноября 2011

Я хочу использовать режим безопасности транспорта с аутентификацией по имени пользователя / паролю и ssl, он отлично работает с аутентификацией Windows:

<transport clientCredentialType="Windows"/>

Я обнаружил в msdn статью, в которой объясняется, как выполнять аутентификацию по имени пользователя и паролю в режиме безопасности транспорта, но требуется специальный модуль http. Меня интересует, почему нет режима безопасности по умолчанию, например:

<transport clientCredentialType="Username"/>

Я согласен с режимом защиты сообщений, если мне нужна аутентификация по имени пользователя / паролю, но если все сайты используют https / ssl для аутентификации, в wcf не должно быть проблем с этим.
Заранее спасибо.

1 Ответ

5 голосов
/ 25 ноября 2011

Вопрос задан неправильно.WCF позволяет использовать транспортную безопасность с пользовательской проверкой имени пользователя и пароля.Режимы безопасности транспорта используют стандартизированные режимы аутентификации для данного транспортного протокола, а в HTTP нет стандартного режима аутентификации «Имя пользователя».Он имеет эквивалентный режим, называемый Обычная аутентификация:

<security mode="Transport">
  <transport clientCredentialType="Basic" />
</security>

По умолчанию Basic аутентификация предполагает учетную запись Windows, но вы можете переключить проверку с помощью custom UserNamePasswordValidator.Проблема заключается в том, что это работает только с самостоятельными услугами.Не работает при размещении сервисов в IIS.Вот почему вопрос задан неправильно.Проблема не в WCF, а в IIS.

Когда вы размещаете службу в IIS, она берет на себя ответственность за аутентификацию и аутентификацию.Модуль по умолчанию для обычной проверки подлинности в IIS поддерживает только учетные записи Windows.Вот почему вам нужен пользовательский модуль для использования учетной записи, отличной от Windows.

Как упомянуто в комментарии @Marc, вы также можете использовать TransportWithMessageCredential режим безопасности:

<security mode="TransportWithMessageCredential">
  <message clientCredentialType="UserName" />
</security>

В этом сценарии аутентификациине выполняется по транспортному протоколу.Это часть сообщения (используется стандарт профиля WS-Security UserNameToken).Вы можете снова использовать пользовательский UserNamePasswordValidator, и на этот раз он работает как с SOAP-сервисами, так и с IIS (SOAP является обязательным требованием).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...