2015-08-24 2 views
0

Я пытаюсь настроить аутентификацию на своем веб-сервисе, однако, после настройки класса проверки, который наследуется от UserNamePasswordValidator, служба по-прежнему позволяет клиенту работать без имени пользователя или пароляСлужба WCF - Пользовательская аутентификация не работает

Web Service

Imports System.IdentityModel.Selectors 

Public Class Authentication 
    Inherits UserNamePasswordValidator 

     Public Overrides Sub Validate(ByVal userName As String, ByVal password As String) 
      If Nothing = userName OrElse Nothing = password Then 
       Throw New ArgumentNullException() 
      End If 

      If Not (userName = "1" AndAlso password = "2") Then 
       ' This throws an informative fault to the client. 
       Throw New FaultException("Unknown Username or Incorrect Password") 
       ' When you do not want to throw an infomative fault to the client, 
       ' throw the following exception. 
       ' Throw New SecurityTokenException("Unknown Username or Incorrect Password") 
      End If 

     End Sub 

    End Class 

Web.config

<?xml version="1.0"?> 
<configuration> 

    <system.web> 
    <compilation debug="true" targetFramework="4.0" /> 
    </system.web> 
    <system.serviceModel> 

    <bindings> 
     <basicHttpBinding> 
     <binding name="Binding1"> 
      <security mode="Message"> 
      <message clientCredentialType="UserName" /> 
      </security> 
     </binding> 
     </basicHttpBinding> 
    </bindings> 

    <services> 
     <service name="Webservice.Service1" behaviorConfiguration="ServiceBehavior"> 
       <endpoint binding="basicHttpBinding" contract="Webservice.IService1" 
       behaviorConfiguration="webHttp"/> 
     </service> 
    </services> 

    <behaviors> 
     <serviceBehaviors> 

     <behavior name="ServiceBehavior"> 
      <serviceCredentials> 
      <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="Webservice.Authentication, Webservice" /> 
      </serviceCredentials> 
      <serviceMetadata httpGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="false" /> 
     </behavior> 


     <behavior> 
      <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment --> 
      <serviceMetadata httpGetEnabled="true"/> 
      <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> 
      <serviceDebug includeExceptionDetailInFaults="false"/> 
     </behavior> 
     </serviceBehaviors> 

     <endpointBehaviors> 
     <behavior name="webHttp"> 
      <webHttp/> 
     </behavior> 
     </endpointBehaviors> 

    </behaviors> 
    </system.serviceModel> 
    <system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    </system.webServer> 

</configuration> 

стороне клиента

Dim client As Webservice.Service1Client = New Webservice.Service1Client() 

'I was expecting this call to error as no username or password was produced 

return client.getData(Data) 

Есть ли что-нибудь, что мне не хватает?

Thanks

ответ

0

Вам потребуется дополнительная конфигурация, чтобы заставить его работать.

Для получения вашей ошибки необходимо использовать bindingConfiguration.

Таким образом изменить конфигурацию конечных точек на это:

<services> 
    <service name="Webservice.Service1" behaviorConfiguration="ServiceBehavior"> 
      <endpoint binding="basicHttpBinding" contract="Webservice.IService1" 
      bindingConfiguration="Binding1"/> 
    </service> 
</services> 

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

+0

Спасибо, поэтому код, который я сделал, и ваше исправление выше, все равно не будут делать то, что я хочу? – user3428422

+0

Да, я знаю. Теперь вы получите сообщение о том, что вам нужно выбрать «Транспорт» или «TransportWithMessageCredential» для учетных данных UserName. Поэтому нужно изменить это. –

+0

Нет, я до сих пор не получаю ошибок, он даже не ударил метод 'Validate' – user3428422

Смежные вопросы