Вопрос задан неправильно.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 является обязательным требованием).