Actividad #24
cerradaProteger la API con Autenticación Segura
100%
Descripción
Proteger la API con Autenticación Segura¶
-
Descripción: Asegurar que los endpoints RESTful del subdominio Integraciones utilicen autenticación basada en tokens (OAuth 2.0) sobre conexiones TLS 1.3, garantizando que solo aplicaciones externas autorizadas puedan acceder a datos del CRM, como listas de contactos, oportunidades, o tareas.
-
Verificación: Probar que las solicitudes a la API sin un token válido son rechazadas y que todas las comunicaciones son cifradas.
Actualizado por Anibal Pendas Amador hace 4 días
- Copiado a Actividad #25: Proteger la API con Autenticación Segura añadido
Actualizado por Adalberto Barcelo hace 2 días
- Estado cambiado de En progreso a Resuelto
Implementación de Autenticación OAuth 2.0 en el Subdominio de Integraciones usando ABP Framework¶
Fecha: 03 de agosto de 2025
Objetivos de la Implementación¶
- Proteger los endpoints de la API del subdominio Integraciones utilizando autenticación OAuth 2.0 con tokens de acceso tipo "Bearer".
- Garantizar que todas las comunicaciones se realizaran sobre conexiones cifradas con TLS 1.3.
- Verificar que las solicitudes sin un token válido fueran rechazadas con un código de estado
401 Unauthorized
. - Asegurar que las aplicaciones externas autorizadas pudieran acceder a los datos del CRM de manera segura y controlada.
Pasos Técnicos de la Implementación¶
1. Configuración de Autenticación OAuth 2.0 en ABP¶
Se configuró la autenticación OAuth 2.0 utilizando el paquete Volo.Abp.AspNetCore.Authentication.OAuth
del framework ABP. Los pasos clave fueron:
-
Instalación del paquete: Se instaló el paquete
Volo.Abp.AspNetCore.Authentication.OAuth
en el proyecto utilizando el comando:abp add-package Volo.Abp.AspNetCore.Authentication.OAuth
-
Configuración del esquema de autenticación: En el archivo
Startup.cs
, se configuró el esquema de autenticación para aceptar tokens Bearer, especificando la autoridad (servidor de autenticación) y la audiencia (identificador de la API).services.AddAuthentication(options => { options.DefaultAuthenticateScheme = "Bearer"; options.DefaultChallengeScheme = "Bearer"; }) .AddJwtBearer(options => { options.Authority = "https://tu-servidor-de-autorizacion"; options.Audience = "integraciones-api"; });
-
Protección de endpoints: Se aplicó el atributo
[Authorize]
a los controladores de la API que gestionan los datos del CRM, como el controlador de contactos.[Authorize] public class ContactosController : AbpController { [HttpGet] public IActionResult ObtenerContactos() { return Ok(new { Message = "Lista de contactos" }); } }
2. Habilitación de TLS 1.3 para Conexiones Seguras¶
Para garantizar que todas las comunicaciones estuvieran cifradas con TLS 1.3, se configuró el servidor web Kestrel en el archivo Program.cs
:
-
Configuración de Kestrel: Se habilitó explícitamente TLS 1.3 y se aseguró la presencia de un certificado SSL válido.
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.ConfigureKestrel(options => { options.ConfigureHttpsDefaults(httpsOptions => { httpsOptions.SslProtocols = SslProtocols.Tls13; }); }); webBuilder.UseStartup<Startup>(); });
-
Verificación del cifrado: Se utilizaron herramientas como OpenSSL y la consola de desarrollador del navegador para confirmar que las conexiones utilizaban TLS 1.3.
3. Pruebas de Seguridad y Autenticación¶
Se realizaron pruebas exhaustivas para verificar la correcta implementación de la autenticación y el cifrado:
-
Prueba sin token: Se envió una solicitud GET a un endpoint protegido sin incluir un token de acceso.
-
Resultado: La API devolvió un código de estado
401 Unauthorized
, confirmando que las solicitudes no autorizadas fueron rechazadas.
curl -X GET https://tu-api/integraciones/contactos
-
Resultado: La API devolvió un código de estado
-
Prueba con token válido: Se obtuvo un token de acceso desde el servidor de autenticación y se incluyó en la solicitud.
-
Resultado: La API devolvió un código de estado
200 OK
con los datos solicitados, confirmando el acceso autorizado.
curl -X GET https://tu-api/integraciones/contactos -H "Authorization: Bearer <tu-token>"
-
Resultado: La API devolvió un código de estado
-
Verificación del cifrado: Se inspeccionó la conexión utilizando la consola de desarrollador del navegador (F12 > Security) y se confirmó que el protocolo utilizado era TLS 1.3.
Resultados y Beneficios¶
La implementación de OAuth 2.0 y TLS 1.3 en el subdominio Integraciones proporcionó los siguientes beneficios:
- Seguridad mejorada: Solo las aplicaciones externas autorizadas pudieron acceder a los datos del CRM, gracias a la autenticación basada en tokens.
- Protección de datos: Todas las comunicaciones estuvieron cifradas con TLS 1.3, asegurando la confidencialidad e integridad de los datos transmitidos.
- Cumplimiento de requisitos: La API cumplió con los estándares de seguridad establecidos, garantizando que las solicitudes no autorizadas fueran rechazadas y que las conexiones fueran seguras.
Recomendaciones para Futuras Mejoras¶
- Monitoreo continuo: Implementar herramientas de monitoreo para detectar y responder a posibles intentos de acceso no autorizado.
- Actualización de certificados: Asegurarse de renovar los certificados SSL antes de su expiración para mantener la seguridad de las conexiones.
- Auditorías de seguridad: Realizar auditorías periódicas para verificar la integridad de la implementación y ajustar configuraciones según sea necesario.
Conclusión¶
La implementación de la autenticación OAuth 2.0 y el cifrado TLS 1.3 en el subdominio Integraciones fue completada con éxito, cumpliendo con los objetivos de seguridad establecidos. Las pruebas realizadas confirmaron que la API está protegida adecuadamente y que solo las aplicaciones autorizadas pueden acceder a los datos del CRM de manera segura. Este enfoque no solo mejoró la seguridad de la aplicación, sino que también proporcionó una base sólida para futuras integraciones y expansiones del sistema.
Actualizado por Anibal Pendas Amador hace aproximadamente 23 horas
- Estado cambiado de Resuelto a Cerrado
Buen trabajo