Cómo: Personalizar el inicio de sesión de usuario al utilizar el servicio de autenticación de WCF

Actualización: noviembre 2007

En este tema se muestra cómo validar credenciales personalizadas para autenticar a usuarios al llamar al servicio de autenticación de ASP.NET mediante Windows Communication Foundation (WCF). Normalmente, la autenticación sólo requiere un nombre de usuario y una contraseña. Sin embargo, en algunos casos, quizá tenga que comprobar la identidad de un usuario mediante credenciales adicionales, como un número de identificación.

Utilice la implementación de WCF del servicio de autenticación si desea que un usuario inicie sesión desde una aplicación cliente que puede enviar y utilizar un mensaje SOAP 1.1, como una aplicación Java.

Para validar credenciales personalizadas para la autenticación

  1. En el archivo Global.asax de la aplicación web, cree un controlador de eventos para el evento Authenticating.

  2. En el controlador, lea el contenido de la propiedad CustomCredential del parámetro AuthenticatingEventArgs del controlador y, a continuación, autentique los valores.

    En el ejemplo siguiente se muestra cómo leer dos valores de autenticación de la propiedad CustomCredential y cómo pasarlos posteriormente a una clase de autenticación personalizada denominada StudentAuthentication.

    Sub AuthenticationService_Authenticating _
       (ByVal sender As Object, _
        ByVal e As System.Web.ApplicationServices.AuthenticatingEventArgs)
        Dim studentid As String = String.Empty
        Dim answer As String = String.Empty
    
        Dim credentials As String() = _
             e.CustomCredential.Split(New Char() {","c})
        If (credentials.Length > 0) Then
            studentid = credentials(0)
            If (credentials.Length > 1) Then
                answer = credentials(1)
            End If
        End If
    
        Try
            e.Authenticated = _
                StudentAuthentication.ValidateStudentCredentials _
                (e.Username, e.Password, studentid, answer)
        Catch ex As ArgumentNullException
            e.Authenticated = False
        End Try
    
    
        e.AuthenticationIsComplete = True
    End Sub
    
    void AuthenticationService_Authenticating(object sender, System.Web.ApplicationServices.AuthenticatingEventArgs e)
    {
        string studentid = String.Empty;
        string answer = String.Empty;
    
        string[] credentials =
            e.CustomCredential.Split(new char[] { ',' });
        if (credentials.Length > 0)
        {
            studentid = credentials[0];
            if (credentials.Length > 1)
            {
                answer = credentials[1];
            }
        }
    
        try
        {
            e.Authenticated =
                StudentAuthentication.ValidateStudentCredentials
                (e.UserName, e.Password, studentid, answer);
        }
        catch (ArgumentNullException ex)
        {
            e.Authenticated = false;
        }
    
        e.AuthenticationIsComplete = true;
    }
    
  3. En el método Application_Start del archivo Global.asax, enlace el controlador de eventos del evento Authenticating.

    En el siguiente ejemplo se muestra cómo enlazar un controlador al evento Authenticating.

    Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
        AddHandler System.Web.ApplicationServices.AuthenticationService.Authenticating, _
          AddressOf Me.AuthenticationService_Authenticating
    End Sub
    
    void Application_Start(object sender, EventArgs e) 
    {
        System.Web.ApplicationServices.AuthenticationService.Authenticating += 
            new EventHandler<System.Web.ApplicationServices.AuthenticatingEventArgs>(AuthenticationService_Authenticating);
    
    }
    
  4. Llame al servicio de autenticación desde una aplicación que pueda utilizar un mensaje de SOAP desde un servicio web, y pase los valores adicionales que se van a autenticar en la propiedad CustomCredential.

Compilar el código

Programación eficaz

Los ejemplos de código anteriores muestran una clase de autenticación personalizada que inicia ArgumentNullException si cualquiera de los parámetros es null. El código debe administrar cualquier excepción que se produzca durante la validación.

Seguridad

Tenga acceso al servicio de autenticación utilizando siempre la Capa de sockets seguros (SSL), mediante el protocolo HTTPS.

Vea también

Conceptos

Información general sobre el servicio de autenticación de Windows Communication Foundation

Referencia

AuthenticationService

AuthenticatingEventArgs