Autenticación Básica (descontinuada)
Esta página fue traducida automáticamente del inglés. Leer el original
Precaución
Descontinuado, no lo use. El paquete Sisk.BasicAuth ya no se mantiene y está obsoleto en NuGet, sin paquete de reemplazo. Su BasicAuthenticateRequestHandler no decodifica las credenciales Base64 enviadas por clientes HTTP estándar, por lo que las solicitudes autenticadas son rechazadas. Implemente la autenticación básica con su propio request handler que lea HttpHeaderCollection.Authorization en su lugar. Esta página se conserva solo como referencia histórica.
El paquete Basic Auth agrega un manejador de solicitudes capaz de manejar el esquema de autenticación básica en su aplicación Sisk con muy poca configuración y esfuerzo.
La autenticación HTTP básica es una forma mínima de autenticación de solicitudes mediante un ID de usuario y una contraseña, donde la sesión es controlada exclusivamente por el cliente y no existen tokens de autenticación o acceso.
Obtenga más información sobre el esquema de autenticación básica en la especificación MDN.
Instalación #
Para comenzar, instale el paquete Sisk.BasicAuth en su proyecto:
> dotnet add package Sisk.BasicAuth
Puede ver más formas de instalarlo en su proyecto en el repositorio NuGet.
Creando su manejador de autenticación #
Puede controlar el esquema de autenticación para un módulo completo o para rutas individuales. Para ello, escribamos primero nuestro primer manejador de autenticación básica.
public class UserAuthHandler : BasicAuthenticateRequestHandler
{
public UserAuthHandler() : base()
{
Realm = "To enter this page, please, inform your credentials.";
}
public override HttpResponse? OnValidating(BasicAuthenticationCredentials credentials, HttpContext context)
{
DbContext db = new DbContext();
// en este caso, estamos usando el correo electrónico como campo de ID de usuario, así que
// vamos a buscar un usuario usando su correo electrónico.
User? user = db.Users.FirstOrDefault(u => u.Email == credentials.UserId);
if (user == null)
{
return base.CreateUnauthorizedResponse("Sorry! No user was found by this email.");
}
// valida que la contraseña de las credenciales sea válida para este usuario.
if (!user.ValidatePassword(credentials.Password))
{
return base.CreateUnauthorizedResponse("Invalid credentials.");
}
// agrega el usuario autenticado al contexto http
// y continúa la ejecución
context.Bag.Add("loggedUser", user);
return null;
}
}Entonces, simplemente asocie este manejador de solicitudes con nuestra ruta o clase.
public class UsersController
{
[RouteGet("/")]
[RequestHandler(typeof(UserAuthHandler))]
public string Index(HttpRequest request)
{
User loggedUser = request.Bag.Get<User>();
return $"Hello, {loggedUser.Name}!";
}
}O usando la clase RouterModule:
public class UsersController : RouterModule
{
public ClientModule()
{
// todas las rutas dentro de esta clase serán manejadas por
// UserAuthHandler.
base.HasRequestHandler(new UserAuthHandler());
}
[RouteGet("/")]
public string Index(HttpRequest request)
{
User loggedUser = request.Bag.Get<User>();
return $"Hello, {loggedUser.Name}!";
}
}Comentarios #
La responsabilidad principal de la autenticación básica se lleva a cabo en el lado del cliente. El almacenamiento, el control de caché y el cifrado se manejan localmente en el cliente. El servidor solo recibe las credenciales y valida si se permite o no el acceso.
Observe que este método no es de los más seguros porque coloca una responsabilidad significativa en el cliente, lo que puede dificultar rastrear y mantener la seguridad de sus credenciales. Además, es crucial que las contraseñas se transmitan en un contexto de conexión segura (SSL), ya que no poseen cifrado propio. Una breve interceptación en los encabezados de una solicitud puede exponer las credenciales de acceso de su usuario.
Opte por soluciones de autenticación más robustas para aplicaciones en producción y evite usar demasiados componentes prefabricados, ya que pueden no adaptarse a las necesidades de su proyecto y terminar exponiéndolo a riesgos de seguridad.