Autenticación y autorización
Implemente mecanismos seguros de autenticación de usuarios (por ejemplo, JWT) y autorización para proteger los endpoints de su servicio web.
Autenticación y autorización es una lección gratuita de Learn Rust Coding en CoddyKit. Esta es la lección 3 de 3. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Learn Rust Coding, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Learn Rust Coding incluye 3 lecciones en total.
Proteja sus servicios web
¡Bienvenido! En esta lección profundizaremos en la autenticación y la autorización, conceptos fundamentales para crear servicios web seguros en Rust.
Aprenderá a proteger los endpoints de su API asegurándose de que solo los usuarios legítimos puedan acceder a ellos y únicamente con los permisos adecuados.
Autenticación frente a autorización
Estos dos términos parecen similares, pero significan cosas distintas:
- Autenticación: Verifica quién es usted. Es como mostrar su documento de identidad para entrar en un edificio.
- Autorización: Determina qué tiene permitido hacer. Una vez dentro, indica a qué habitaciones puede entrar.
Implementaremos ambas para proteger nuestros servicios web de Rust.
¿Por qué proteger sus API?
Proteger los endpoints de su API es fundamental por varios motivos:
- Privacidad de los datos: Mantener a salvo los datos confidenciales de los usuarios frente a accesos no autorizados.
- Integridad del sistema: Evitar que actores maliciosos modifiquen o dañen sus datos.
- Cumplimiento: Cumplir los requisitos legales y normativos (por ejemplo, RGPD y HIPAA).
Una capa de seguridad sólida genera confianza y protege su aplicación.
JSON Web Tokens (JWT)
Un método popular de autenticación en los servicios web modernos consiste en utilizar JSON Web Tokens (JWT), que se pronuncian «yot».
Los JWT son un medio compacto y seguro para URL de representar afirmaciones que se transfieren entre dos partes. A menudo se utilizan para la autenticación sin estado.
Esto significa que el servidor no necesita almacenar la información de sesión de cada usuario.
Dentro de un JWT: encabezado, carga útil y firma
Un JWT consta de tres partes, separadas por puntos:
- Encabezado: Contiene metadatos sobre el token, como su tipo (JWT) y el algoritmo de firma (por ejemplo, HS256).
- Carga útil: Contiene las «claims» (afirmaciones): declaraciones sobre una entidad, normalmente el usuario, y datos adicionales.
- Firma: Se utiliza para verificar que el token no haya sido manipulado. Se crea codificando el encabezado y la carga útil con una clave secreta.
Generar y verificar JWT en Rust
Veamos cómo generar y verificar un JWT mediante el crate jsonwebtoken en Rust. Recuerde que deberá añadir jsonwebtoken, serde (con la feature «derive») y chrono (con la feature «serde») a su Cargo.toml.
Este ejemplo genera un token y lo verifica inmediatamente después.
use jsonwebtoken::{encode, decode, Header, EncodingKey, DecodingKey, Validation};
use serde::{Deserialize, Serialize};
use chrono::{Utc, Duration};
#[derive(Debug, Serialize, Deserialize)]
struct Claims {
sub: String, // Subject (user ID)
company: String,
exp: usize, // Expiration time
}
fn main() {
// --- Setup (requires crates: jsonwebtoken, serde, chrono) ---
let secret_key = "my_super_secret_key";
// --- 1. Generate a JWT ---
let my_claims = Claims {
sub: "user123".to_string(),
company: "CoddyKit".to_string(),
exp: (Utc::now() + Duration::minutes(10)).timestamp() as usize,
};
let token = encode(
&Header::default(),
&my_claims,
&EncodingKey::from_secret(secret_key.as_ref()),
).expect("Failed to encode token");
println!("Generated JWT:\n{}", token);
println!("\n--- Verifying the Token ---");
// --- 2. Verify the JWT ---
let validation = Validation::default();
let decoded_result = decode::<Claims>(
&token,
&DecodingKey::from_secret(secret_key.as_ref()),
&validation,
);
match decoded_result {
Ok(token_data) => {
println!("Token valid!");
println!("Subject: {}", token_data.claims.sub);
println!("Company: {}", token_data.claims.company);
},
Err(err) => println!("Token invalid: {:?}", err),
}
}Autorización: definir el acceso
Una vez autenticado el usuario (sabemos quién es), la autorización determina a qué recursos o acciones tiene permitido acceder.
Entre los modelos de autorización habituales se incluyen:
- Control de acceso basado en roles (RBAC): Se asignan roles a los usuarios (por ejemplo, «admin», «editor» o «viewer») y cada rol tiene permisos específicos.
- Control de acceso basado en atributos (ABAC): El acceso se concede según los atributos del usuario, del recurso o del entorno.
Concepto de middleware de autorización
En un servicio web, la autorización suele gestionarse mediante middleware. Se trata de código que se ejecuta antes que el controlador principal de la ruta.
El middleware:
- Extraería la identidad del usuario autenticado (por ejemplo, de un JWT).
- Comprobaría sus roles o permisos comparándolos con el acceso requerido por el endpoint solicitado.
- Si está autorizado, permitiría continuar la solicitud; de lo contrario, devolvería un error «Unauthorized» o «Forbidden».
Esto mantiene los controladores de las rutas limpios y centrados en la lógica de negocio.
Ponga a prueba sus conocimientos
Comprobemos rápidamente su comprensión de la autenticación y la autorización.
Repaso: protección de servicios web
¡Excelente trabajo! En esta lección hemos visto los aspectos esenciales para proteger sus servicios web de Rust:
- La diferencia entre autenticación (quién es usted) y autorización (qué puede hacer).
- La importancia de proteger los endpoints de las API.
- Cómo funcionan los JSON Web Tokens (JWT) para la autenticación sin estado, incluida su estructura.
- Un ejemplo práctico en Rust para generar y verificar JWT.
- Los conceptos de control de acceso basado en roles y cómo el middleware puede implementar comprobaciones de autorización.
¡Ya está preparado para crear aplicaciones Rust más seguras y robustas!
Preguntas frecuentes
¿La lección «Autenticación y autorización» es gratis?
Sí — el texto completo de «Autenticación y autorización» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Learn Rust Coding, actualiza a CoddyKit PRO. El curso de Learn Rust Coding incluye 3 lecciones en total.
¿Qué aprenderé en «Autenticación y autorización»?
Implemente mecanismos seguros de autenticación de usuarios (por ejemplo, JWT) y autorización para proteger los endpoints de su servicio web. Practicas Learn Rust Coding con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Learn Rust Coding?
No se requiere experiencia previa. Learn Rust Coding en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 3.
¿Cuánto tiempo toma la lección «Autenticación y autorización»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Learn Rust Coding?
Sí. Cada lección de Learn Rust Coding incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- API REST con Actix-web/Rocket
- Integración con bases de datos (SQLx/Diesel)
- Autenticación y autorización