Какие настройки IIS я должен использовать для использования собственной проверки пароля с WCF - PullRequest
2 голосов
/ 07 февраля 2012

Я создал простой сервис WCF, который размещен в IIS.Теперь я хочу использовать свою собственную аутентификацию userName.Мой web.config:

  <system.serviceModel>

    <bindings>
      <basicHttpBinding>
        <binding name="MyBinding">
          <security mode="TransportCredentialOnly">
            <transport clientCredentialType="Basic"></transport>
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <services>
      <service name="WcfIIsBasicAuthTest.Service1" behaviorConfiguration="MyBehavior">
        <endpoint address=""
            binding="basicHttpBinding"
            contract="WcfIIsBasicAuthTest.IService1"
            bindingConfiguration="MyBinding"/>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="MyBehavior">
          <serviceCredentials>
            <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="WcfIIsBasicAuthTest.MyValidator, WcfIIsBasicAuthTest"/>
            </serviceCredentials>
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>

Валидатор

namespace WcfIIsBasicAuthTest
{
    public class MyValidator :UserNamePasswordValidator
    {
        public override void Validate(string userName, string password)
        {
            if(!(userName == "test" && password == "test"))
            {
                throw new SecurityTokenException("Validation Failed!");
            }
        }
    }
}

Если я запускаю эту службу WCF из Visual Studio, я получаю следующую ошибку: The authentication schemes configured on the host ('Ntlm, Anonymous') do not allow those configured on the binding 'BasicHttpBinding' ('Basic').

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

Ошибка, если включена только анонимная аутентификация: The authentication schemes configured on the host ('Anonymous') do not allow those configured on the binding 'BasicHttpBinding' ('Basic').

Если я устанавливаю базовую аутентификацию в IIS, требуется действительный локальный пользователь, которого я не хочу предоставлять (так как я хочунаписать свой собственный userprovider).

Любые советы / ссылки, как настроить такой базовый auth userprovider с wcf и iis?

1 Ответ

2 голосов
/ 07 февраля 2012

Можете ли вы установить следующую конфигурацию для использования собственного UserNameValidator:

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

Чтобы это работало с basicHttpBinding, вам нужно настроить HTTPS, так как WCF не позволяет передавать пароль пользователя по каналу в виде открытого текста. Другой альтернативой является использование wsHttpBinding.

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