Compartir a través de


Autenticación en Reporting Services

La autenticación es el proceso de establecer el derecho de un usuario a una identidad. Hay muchas técnicas que puede usar para autenticar a un usuario. La manera más común es usar contraseñas. Al implementar la autenticación de formularios, por ejemplo, quiere una implementación que consulta a los usuarios para obtener credenciales (normalmente por alguna interfaz que solicita un nombre de inicio de sesión y una contraseña) y, a continuación, valida a los usuarios en un almacén de datos, como una tabla de base de datos o un archivo de configuración. Si no se pueden validar las credenciales, se produce un error en el proceso de autenticación y el usuario asume una identidad anónima.

Autenticación personalizada en Reporting Services

En Reporting Services, el sistema operativo Windows controla la autenticación de los usuarios a través de la seguridad integrada o a través de la recepción y validación explícitas de las credenciales de usuario. La autenticación personalizada se puede desarrollar en Reporting Services para admitir esquemas de autenticación adicionales. Esto se hace posible a través de la interfaz IAuthenticationExtensionde extensión de seguridad . Todas las extensiones heredan de la IExtension interfaz base para cualquier extensión implementada y usada por el servidor de informes. IExtension, así como IAuthenticationExtension, son miembros del Microsoft.ReportingServices.Interfaces espacio de nombres .

La forma principal de autenticarse en un servidor de informes de Reporting Services es el LogonUser método . Este miembro del servicio web de Reporting Services se puede usar para pasar credenciales de usuario a un servidor de informes para la validación. La extensión de seguridad subyacente implementa IAuthenticationExtension.LogonUser que contiene el código de autenticación personalizado. En el ejemplo de autenticación de formularios, LogonUser, que realiza una comprobación de autenticación con las credenciales proporcionadas y un almacén de usuarios personalizado en una base de datos. Un ejemplo de una implementación de LogonUser tiene este aspecto:

public bool LogonUser(string userName, string password, string authority)  
{  
   return AuthenticationUtilities.VerifyPassword(userName, password);  
}  
  

La siguiente función de ejemplo se usa para comprobar las credenciales proporcionadas:

  
internal static bool VerifyPassword(string suppliedUserName,  
   string suppliedPassword)  
{   
   bool passwordMatch = false;  
   // Get the salt and pwd from the database based on the user name.  
   // See "How To: Use DPAPI (Machine Store) from ASP.NET," "How To:  
   // Use DPAPI (User Store) from Enterprise Services," and "How To:  
   // Create a DPAPI Library" for more information about how to use  
   // DPAPI to securely store connection strings.  
   SqlConnection conn = new SqlConnection(  
      "Server=localhost;" +   
      "Integrated Security=SSPI;" +  
      "database=UserAccounts");  
   SqlCommand cmd = new SqlCommand("LookupUser", conn);  
   cmd.CommandType = CommandType.StoredProcedure;  
  
   SqlParameter sqlParam = cmd.Parameters.Add("@userName",  
       SqlDbType.VarChar,  
       255);  
   sqlParam.Value = suppliedUserName;  
   try  
   {  
      conn.Open();  
      SqlDataReader reader = cmd.ExecuteReader();  
      reader.Read(); // Advance to the one and only row  
      // Return output parameters from returned data stream  
      string dbPasswordHash = reader.GetString(0);  
      string salt = reader.GetString(1);  
      reader.Close();  
      // Now take the salt and the password entered by the user  
      // and concatenate them together.  
      string passwordAndSalt = String.Concat(suppliedPassword, salt);  
      // Now hash them  
      string hashedPasswordAndSalt =  
         FormsAuthentication.HashPasswordForStoringInConfigFile(  
         passwordAndSalt,  
         "SHA1");  
      // Now verify them. Returns true if they are equal.  
      passwordMatch = hashedPasswordAndSalt.Equals(dbPasswordHash);  
   }  
   catch (Exception ex)  
   {  
       throw new Exception("Exception verifying password. " +  
          ex.Message);  
   }  
   finally  
   {  
       conn.Close();  
   }  
   return passwordMatch;  
}  

Flujo de autenticación

El servicio web reporting Services proporciona extensiones de autenticación personalizadas para habilitar la autenticación de formularios por el Administrador de informes y el servidor de informes.

El LogonUser método del servicio web de Reporting Services se usa para enviar credenciales al servidor de informes para la autenticación. El servicio web usa encabezados HTTP para pasar un vale de autenticación (conocido como "cookie") desde el servidor al cliente para las solicitudes de inicio de sesión validadas.

En la ilustración siguiente se muestra el método de autenticación de usuarios en el servicio web cuando la aplicación se implementa con un servidor de informes configurado para usar una extensión de autenticación personalizada.

Flujo de autenticación de seguridad de Reporting Services

Como se muestra en la figura 2, el proceso de autenticación es el siguiente:

  1. Una aplicación cliente llama al método de servicio LogonUser web para autenticar a un usuario.

  2. El servicio web realiza una llamada al método de la LogonUser extensión de seguridad, en concreto, la clase que implementa IAuthenticationExtension.

  3. La implementación de valida el nombre de LogonUser usuario y la contraseña en el almacén de usuarios o en la entidad de seguridad.

  4. Tras la autenticación correcta, el servicio web crea una cookie y la administra para la sesión.

  5. El servicio web devuelve el vale de autenticación a la aplicación que realiza la llamada en el encabezado HTTP.

Cuando el servicio web autentica correctamente a un usuario a través de la extensión de seguridad, genera una cookie que se usa para las solicitudes posteriores. Es posible que la cookie no persista dentro de la entidad de seguridad personalizada porque el servidor de informes no posee la entidad de seguridad. La cookie se devuelve desde el LogonUser método de servicio web y se usa en llamadas a métodos de servicio web posteriores y en el acceso URL.

Nota:

Para evitar poner en peligro la cookie durante la transmisión, las cookies de autenticación devueltas de LogonUser deben transmitirse de forma segura mediante el cifrado de Capa de sockets seguros (SSL).

Si accede al servidor de informes a través del acceso URL cuando se instala una extensión de seguridad personalizada, Internet Information Services (IIS) y ASP.NET administrar automáticamente la transmisión del vale de autenticación. Si accede al servidor de informes a través de la API SOAP, la implementación de la clase proxy debe incluir compatibilidad adicional para administrar el vale de autenticación. Para obtener más información sobre el uso de la API SOAP y la administración del vale de autenticación, consulte "Uso del servicio web con seguridad personalizada".

Autenticación de formularios

La autenticación de formularios es un tipo de autenticación ASP.NET en la que un usuario no autenticado se dirige a un formulario HTML. Una vez que el usuario proporciona credenciales, el sistema emite una cookie que contiene un vale de autenticación. En las solicitudes posteriores, el sistema comprueba primero la cookie para ver si el usuario ya estaba autenticado por el servidor de informes.

Reporting Services se puede ampliar para admitir la autenticación de formularios mediante las interfaces de extensibilidad de seguridad disponibles a través de la API de Reporting Services. Si extiende Reporting Services para usar la autenticación de formularios, use capa de sockets seguros (SSL) para todas las comunicaciones con el servidor de informes para evitar que los usuarios malintencionados obtengan acceso a la cookie de otro usuario. SSL permite a los clientes y un servidor de informes autenticarse entre sí y asegurarse de que ningún otro equipo pueda leer el contenido de las comunicaciones entre los dos equipos. Todos los datos enviados desde un cliente a través de una conexión SSL se cifran para que los usuarios malintencionados no puedan interceptar contraseñas ni datos enviados a un servidor de informes.

La autenticación de formularios se implementa generalmente para admitir cuentas y autenticación para plataformas distintas de Windows. Se presenta una interfaz gráfica a un usuario que solicita acceso a un servidor de informes y las credenciales proporcionadas se envían a una entidad de seguridad para la autenticación.

La autenticación de formularios requiere que una persona esté presente para escribir las credenciales. Para las aplicaciones desatendidas que se comunican directamente con el servicio web de Reporting Services, la autenticación de formularios debe combinarse con un esquema de autenticación personalizado.

La autenticación de formularios es adecuada para Reporting Services cuando:

  • Debe almacenar y autenticar a los usuarios que no tienen cuentas de Microsoft Windows y

  • Debe proporcionar su propio formulario de interfaz de usuario como página de inicio de sesión entre diferentes páginas de un sitio web.

Tenga en cuenta lo siguiente al escribir una extensión de seguridad personalizada que admita la autenticación de formularios:

  • Si usa la autenticación de formularios, el acceso anónimo debe estar habilitado en el directorio virtual del servidor de informes en Internet Information Services (IIS).

  • ASP.NET autenticación debe establecerse en Formularios. Configure ASP.NET autenticación en el archivo Web.config para el servidor de informes.

  • Reporting Services puede autenticar y autorizar a los usuarios con autenticación de Windows o autenticación personalizada, pero no ambos. Reporting Services no admite el uso simultáneo de varias extensiones de seguridad.

Véase también

Implementación de una extensión de seguridad