none
Problema con autenticación WCF RRS feed

  • Pregunta

  • Buenos días, tengo un problema que no me ha dejado avanzar con el desarrollo de mi aplicación. Es mi primer proyecto con WCF por lo tanto no soy para nada experto en esto. Tengo una solución en Visual Studio 2010 (VB.NET) la cual consta de los siguiente proyectos:
    En el proyecto Services cree una clase "Authenticate.vb" la cual hereda de "UserNamePasswordValidator", esto para sobreescribir el metodo Validate. La configuración para el servicio User es la siguiente:

     
          <service behaviorConfiguration="authenticateBehavior" name="Prosiect.Security.Services.User">
    		<endpoint address="" binding="basicHttpBinding" contract="Prosiect.Security.Services.Interfaces.IUser"
    					bindingConfiguration="AutenticacionHttp"/>			  
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
    		  
            <host>
              <baseAddresses>
                <add baseAddress="http://localhost/SecurityServices/User.svc"/>
              </baseAddresses>
            </host>
          </service>
    

    Configuración del behavior:

            <behavior name="authenticateBehavior">
              <serviceAuthorization roleProviderName="MSPRoleProvider"
                                    principalPermissionMode="UseAspNetRoles"/>
              <serviceCredentials>            
                <userNameAuthentication customUserNamePasswordValidatorType="Prosiect.Security.Services.Authenticate, Services"
                                        userNamePasswordValidationMode="Custom"/>            
              </serviceCredentials>
              <serviceMetadata httpGetEnabled="True"/>
              <serviceDebug includeExceptionDetailInFaults="True"/>
            </behavior>
    

    Configuración del binding:

    	  <bindings>
    		  <basicHttpBinding>
    			  <binding name="AutenticacionHttp">
    				  <security mode="TransportCredentialOnly">
    					  <transport clientCredentialType="Basic"/>
                <message clientCredentialType="UserName"/>
    				  </security>
    			  </binding>
    		  </basicHttpBinding>
    	  </bindings>
    

    Configuración del servicio en el proyecto Agent y el WebSite (binding y endpoint):

                    <binding name="BasicHttpBinding_ContratoUsuario" closeTimeout="00:01:00"
                        openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                        allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                        maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                        messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
                        useDefaultWebProxy="true">
                        <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                            maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                        <security mode="TransportCredentialOnly">
                            <transport clientCredentialType="Basic" proxyCredentialType="None"
                                realm="" />
                            <message clientCredentialType="UserName" algorithmSuite="Default" />
                        </security>
                    </binding>
    
                <endpoint address="http://localhost/SecurityServices/User.svc"
                    binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ContratoUsuario"
                    contract="UserService.ContratoUsuario" name="BasicHttpBinding_ContratoUsuario" />
    

    El error el es siguiente:
    System.ServiceModel.Security.MessageSecurityException {"The HTTP request was forbidden with client authentication scheme 'Basic'."}
    System.Net.WebException {"The remote server returned an error: (403) Forbidden."}

    La función que me da el error es la siguiente:

    Public Shared Function Authenticate(ByVal username As String, ByVal password As String) As Boolean
            Dim ConnectionUser As New UserService.ContratoUsuarioClient
            ConnectionUser.ClientCredentials.UserName.UserName = username
            ConnectionUser.ClientCredentials.UserName.Password = password
            Return ConnectionUser.IsAuthenticate
    End Function
    

    Espero me puedan ayudar es super urgente..... Gracias
    lunes, 8 de marzo de 2010 17:28

Todas las respuestas