Вы можете использовать wsHttpBinding для передачи учетных данных в вашу службу, однако это по крайней мере потребует от вас отправки учетных данных с защитой сообщений.Вы можете объединить это с анонимной аутентификацией в IIS.Таким образом, каждый может получить доступ к службе на транспортном уровне, но вы сможете обрабатывать учетные данные самостоятельно.
Для расширения у меня есть служба WCF, работающая в IIS с HTTPS и анонимной аутентификацией.В моем файле web.config я настроил wsHttpBinding, например:
<bindings>
<wsHttpBinding>
<binding name="CredentialsBinding" />
<security mode="TransportWithMessageCredential">
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</wsHttpBinding>
</bindings>
В своем поведении я настроил поведение службы для пользовательского средства проверки имени пользователя и пароля, например:
<behaviors>
<serviceBehaviors>
<behavior name="DefaultBehavior">
<serviceCredentials>
<userNameAuthentication
userNamePasswordValidationMode="Custom"
customUserNamePasswordValidatorType="MyNamespace.CredentialValidator, MyNamespace"/>
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
Валидатор выглядит следующим образом:
namespace MyNamespace.CredentialValidator
{
public class CredentialValidator: UserNamePasswordValidator
{
public override void Validate(string userName, string password)
{
// you can now handle the username and password passed to your service
// with a wsHttpBinding through HTTPS
}
}
}
- EDIT
Рори Примроуз описывает то, что вы, вероятно, ищете в своей статье Безопасность WCF: Получениепароль пользователя , используя CustomUserNameSecurityTokenAuthenticator для получения пароля для дальнейшего использования.