Autenticación – ejemplos de C#
En este artículo, encontrará un ejemplo sencillo de cómo crear un controlador de mensajes personalizado para una solicitud web con esquemas de autenticación basados en contraseñas, como básico, digest, NTLM y Kerberos.
La autenticación es el proceso de determinar si un cliente tiene derecho a acceder a un recurso. El protocolo HTTP admite la autenticación como medio para negociar el acceso a un recurso protegido. Primero, verifica las credenciales del usuario (nombre de usuario y contraseña). Si ambos son correctos, entonces el usuario puede ingresar al sistema. Aquí se describen brevemente varios esquemas de autenticación para HTTP: autenticación básica, digest, NTLM y Kerberos.
Crear un controlador de mensajes para la autenticación básica HTTP
La autenticación básica es un método para que un agente de usuario HTTP (como un navegador web) proporcione un nombre de usuario y una contraseña al realizar una solicitud. Creemos un controlador personalizado que pueda usar para la autenticación básica. Tome los siguientes pasos:
- Utilice el espacio de nombres necesario, que es Aspose.Html.Net.
- Defina su propia clase
CredentialHandler
que se derivará de la clase MessageHandler. - Anule el método Invoke() para implementar el comportamiento del controlador de mensajes personalizado.
El siguiente fragmento de código muestra cómo crear un CredentialHandler
para acceder a una fuente remota con autorización mediante la autenticación básica HTTP:
1// This message handler used basic autentifications request
2public class CredentialHandler : MessageHandler
3{
4 // Override the Invoke() method
5 public override void Invoke(INetworkOperationContext context)
6 {
7 context.Request.Credentials = new NetworkCredential("username", "securelystoredpassword");
8 context.Request.PreAuthenticate = true;
9
10 Next(context);
11 }
12}
Pasa NetworkCredential a un objeto Web Request, que lo utiliza para autenticar solicitudes en un servidor de Internet.
Agregar CredentialHandler a la canalización
El concepto clave del trabajo de los manejadores de mensajes es encadenarlos. Hemos creado CredentialHandler
y debemos agregarlo a la canalización para implementar el ejemplo de autenticación básica HTTP. Consideremos el siguiente ejemplo de C#:
1// Create an instance of the Configuration class
2using var configuration = new Configuration();
3
4// Add the CredentialHandler to the chain of existing message handlers
5var service = configuration.GetService<INetworkService>();
6var handlers = service.MessageHandlers;
7handlers.Insert(0, new CredentialHandler());
8
9// Initialize an HTML document with specified configuration
10using var document = new HTMLDocument("https://httpbin.org/basic-auth/username/securelystoredpassword", configuration);
El constructor Configuration() inicializa una instancia de la clase Configuration. Una vez creada la configuración, se invocan los métodos GetService<INetworkService>()
y MessageHandlers.Insert()
. El método Insert() agrega CredentialHandler
en el primer lugar de la colección de controladores de mensajes. Utilice el constructor
HTMLDocument(url, configuration
) para inicializar un documento HTML e implementar el ejemplo de autenticación básica HTTP.
Esquemas de autenticación
Autenticación básica
La autenticación básica es un método de autenticación estándar compatible con servidores HTTP y casi todos los navegadores web, lo que lo convierte en un excelente método de control de acceso.
Sin embargo, un grave inconveniente de la autenticación básica es que el nombre de usuario y la contraseña del cliente se transfieren en texto sin formato codificado en Base64. Base64 no es una forma de cifrado y debe tratarse como si se enviara el nombre de usuario y la contraseña en texto sin cifrar. Por lo tanto, si es necesario proteger un recurso, se recomienda encarecidamente utilizar un esquema de autenticación distinto de la autenticación básica.
Digest
La autenticación implícita es un método de autenticación que un servidor web puede utilizar para negociar credenciales, como un nombre de usuario o contraseña, con el navegador web del usuario. Está destinado a reemplazar la autenticación básica. The Digest aplica una función hash al nombre de usuario y la contraseña antes de enviarlos a través de la red. El hash de los datos hace que sea más difícil robar y reutilizar las credenciales de un usuario con este esquema de autenticación. Se puede utilizar para verificar la identidad de un usuario antes de enviar información confidencial, como el historial de transacciones bancarias en línea.
NTLM
La autenticación NTLM (New Technology LAN Manager) es un esquema de desafío-respuesta que es una versión más segura de la autenticación Digest. NTLM utiliza credenciales de Windows para convertir los datos de la solicitud en lugar de un nombre de usuario y contraseña sin codificar. La autenticación NTLM requiere varios intercambios entre el cliente y el servidor. El servidor y los servidores proxy intermedios deben mantener conexiones persistentes para que la autenticación se complete correctamente.
Kerberos
Kerberos es un protocolo de autenticación de redes informáticas. Está desarrollado para proporcionar una autenticación sólida para solicitudes de cliente/servidor utilizando criptografía de clave secreta. Fue creado por el MIT como solución a estos problemas de seguridad de la red. El protocolo Kerberos se considera seguro. Se ha utilizado ampliamente durante décadas y ha demostrado ser seguro como mecanismo de autenticación de usuarios. Kerberos utiliza criptografía sólida para proteger datos confidenciales.
El nombre Kerberos fue tomado de la mitología griega. Kerberos era un perro de tres cabezas que guardaba las puertas del Hades. Los tres jefes del protocolo Kerberos representan el cliente, el recurso de red y Centro de distribución de claves (KDC), que es un servicio de autenticación Kerberos de terceros confiable.
Puede descargar los ejemplos completos y los archivos de datos desde GitHub.