Я читал документацию по конфигурации WCF и хотел бы получить подтверждение ограничения, с которым я столкнулся.
У меня есть клиент, который ожидает следующую конфигурацию привязки:
<bindings>
<basicHttpBinding>
<binding name="secureHttpBinding">
<security mode="Transport">
<transport clientCredentialType="Basic"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
На стороне сервера я реализовал пользовательский валидатор имени пользователя и пароля, потому что мы не используем Windows или учетные записи домена для клиентов. Я следовал этому руководству: https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/how-to-use-a-custom-user-name-and-password-validator, но они и другие примеры, которые я видел, используют wsHttpBinding или добавляют защиту сообщений.
Конечные точки и поведение сервера выглядят примерно так:
<services>
<service name="MyWcfService.Service" behaviorConfiguration="MyBehavior">
<endpoint
address=""
binding="basicHttpBinding"
bindingConfiguration="secureHttpBinding"
contract="MyWcfService.IService"/>
<endpoint
address="mex"
binding="mexHttpsBinding"
contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="MyBehavior">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
<serviceCredentials>
<userNameAuthentication
userNamePasswordValidationMode="Custom"
customUserNamePasswordValidatorType="MyValidator, MyWcfService"/>
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
При размещении службы в IIS с включенной аутентификацией basi c настраиваемый валидатор не срабатывает, IIS пытается проверить предоставленные учетные данные для учетных записей Windows и выдает сообщение об ошибке, если учетная запись пользователя этого не делает. Существуют:
HTTP-запрос не авторизован с помощью схемы аутентификации клиента 'Basi c'.
Поэтому невозможно иметь настраиваемый валидатор учетных данных для размещенной службы в IIS с базовым HttpBinding, режимом безопасности транспорта и типом учетных данных транспортного клиента Basi c? Нет ли способа переопределить базовую c Windows аутентификацию, которую выполняет IIS?