WCF CustomUserNamePasswordValidator - PullRequest
       1

WCF CustomUserNamePasswordValidator

1 голос
/ 30 марта 2011

У меня проблема с правильной настройкой WCF для безопасности. Приведенная ниже конфигурация просто не может распознать, что я пытаюсь использовать CustomUserNamePasswordValidator. Когда я тестирую сервис, класс Validator просто игнорируется, как будто я никогда ничего не настраивал. Может кто-нибудь шпионить что-то не так в этой конфигурации? Любая помощь будет принята с благодарностью.

<?xml version="1.0"?>

  <service behaviorConfiguration="defaultServiceBehavior" name="SSAServices.SelfServiceAdvertiserService">
    <endpoint address="/2.4/SelfServiceAdvertiserService.svc" binding="wsHttpBinding" contract="SSAServiceContracts.Two_Four.ISelfServiceAdvertiserService" bindingConfiguration="serviceBinding" />
 </service>
    </services>
<bindings>
  <wsHttpBinding>
    <binding name="serviceBinding" >
      <security mode="Message">
        <message clientCredentialType="UserName" />
      </security>
    </binding>
  </wsHttpBinding>
</bindings>
    <behaviors>
        <serviceBehaviors>
            <behavior name="">
                <serviceMetadata httpGetEnabled="true"/>
                <serviceDebug includeExceptionDetailInFaults="false"/>
            </behavior>
    <behavior name="defaultServiceBehavior">
      <serviceMetadata httpGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="false"/>
      <serviceCredentials>
        <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="ServiceAuthenticationBase, SSAServices" />
      </serviceCredentials>
    </behavior>
        </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>
</system.serviceModel>
<system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
    </modules>
</system.webServer>

Ответы [ 2 ]

3 голосов
/ 30 марта 2011

Я думаю, что причина проблемы здесь:

customUserNamePasswordValidatorType="ServiceAuthenticationBase, SSAServices" 

Вы должны объявить свой тип с его пространством имен и именем класса следующим образом:

customUserNamePasswordValidatorType="SSAServices.ServiceAuthenticationBase, SSAServices"

customUserNamePasswordValidatorType = "type,Сборка "

Надеюсь, это поможет.

2 голосов
/ 30 марта 2011

ОК. Я задал вопрос, чтобы проверить, работает ли эта привязка - поскольку я сомневался - но я, возможно, с таким же успехом могу опубликовать свой ответ, так как не могу понять, как это работает.

Безопасность сообщений требует шифрования и длячтобы это произошло, вам также нужны переговоры.Поэтому вам необходимо настроить сертификат X509 для вашего сервиса в разделе beahviour:

                     <serviceCredentials>
                            <serviceCertificate findValue="MyCert" storeLocation="LocalMachine"
                                 storeName="My" x509FindType="FindBySubjectName" />
                            <userNameAuthentication userNamePasswordValidationMode="Custom"
                                 customUserNamePasswordValidatorType="type, assembly" />
                     </serviceCredentials>

Также убедитесь, что вы также включили переговоры:

                <security mode="Message">
                    <message clientCredentialType="UserName" negotiateServiceCredential="true" />
                </security>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...