Cómo: Usar un proveedor de pertenencia no predeterminado para servicio de autenticación de WCF

Actualización: noviembre 2007

En este tema se muestra cómo seleccionar mediante programación el proveedor de suscripciones al llamar al servicio de autenticación de ASP.NET utilizando Windows Communication Foundation (WCF). Puede usar un proveedor de suscripciones no predeterminado si tiene que autenticar usuarios mediante proveedores de suscripciones diferentes, según la información obtenida en tiempo de ejecución. Para autenticar mediante un proveedor de suscripciones no predeterminado debe crear un controlador de eventos para el evento Authenticating.

WCF se utiliza para que el servicio de autenticación inicie sesión en un usuario desde una aplicación cliente que puede enviar y utilizar un mensaje de SOAP 1.1, por ejemplo una aplicación Java. La aplicación cliente puede autenticar al usuario con las mismas credenciales de usuario que una aplicación web ASP.NET.

Para autenticar mediante un proveedor de suscripciones no predeterminado

  1. Cree y configure el proveedor de suscripciones que desee utilizar.

    Para obtener más información, vea Implementar un proveedor de suscripciones y Configurar una aplicación ASP.NET para utilizar la suscripción.

  2. En el archivo Global.asax, cree un controlador de eventos para el evento Authenticating y agregue código que autentique las credenciales de usuario llamando al proveedor de suscripciones personalizado.

    En el ejemplo siguiente se muestra un controlador del evento Authenticating que autentica las credenciales mediante los proveedores denominados ContosoSqlProvider, FabrikamSqlProvider o el proveedor de suscripciones predeterminado. Las credenciales de usuario se almacenan en bases de datos diferentes según el tipo de usuario. El controlador de eventos determina qué proveedor se debe utilizar de acuerdo a la dirección de correo electrónico indicada como nombre de usuario.

    Sub AuthenticationService_Authenticating _
       (ByVal sender As Object, _
        ByVal e As System.Web.ApplicationServices.AuthenticatingEventArgs)
    
        If (e.Username.IndexOf("@contoso.com") >= 0) Then
            e.Authenticated = Membership.Providers("ContosoSqlProvider").ValidateUser(e.Username, e.Password)
        ElseIf (e.Username.IndexOf("@fabrikam.com") >= 0) Then
            e.Authenticated = Membership.Providers("FabrikamSqlProvider").ValidateUser(e.Username, e.Password)
        Else
            e.Authenticated = Membership.Provider.ValidateUser(e.Username, e.Password)
        End If
        e.AuthenticationIsComplete = True
    End Sub
    
    void AuthenticationService_Authenticating(object sender, System.Web.ApplicationServices.AuthenticatingEventArgs e)
    {
        if (e.UserName.IndexOf("@contoso.com") >= 0)
        {
            e.Authenticated = Membership.Providers["ContosoSqlProvider"].ValidateUser(e.UserName, e.Password);
        }
        else if (e.UserName.IndexOf("@fabrikam.com") >= 0)
        {
            e.Authenticated = Membership.Providers["FabrikamSqlProvider"].ValidateUser(e.UserName, e.Password);
        }
        else
        {
            e.Authenticated = Membership.Provider.ValidateUser(e.UserName, e.Password);
        }
        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 leer y utilizar un mensaje de SOAP 1.1.

Compilar el código

Debe configurar el servicio de autenticación en un servidor web para que funcionen los ejemplos anteriores. Para obtener más información, vea Cómo: Habilitar el servicio de autenticación de WCF.

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

Otros recursos

Administrar usuarios mediante suscripciones