GithubHelp home page GithubHelp logo

lauraval19 / arep_taller_secureapps Goto Github PK

View Code? Open in Web Editor NEW

This project forked from alizeci/arep_taller_secureapps

0.0 0.0 0.0 6.59 MB

Desarrollo de una aplicación Web segura en la que se garantiza autenticación, autorización e integridad de usuarios.

License: GNU General Public License v3.0

JavaScript 7.12% Java 2.63% CSS 7.77% HTML 82.48%

arep_taller_secureapps's Introduction

Taller de Construcción de una Aplicación Web Segura

Se construye una aplicación web segura que permite evidenciar principios de seguridad como autenticación, autorización e integridad de los usuarios, desde el cliente y en la comunicación entre los servicios a través de sus endpoints públicos.

Entendimiento 🎯

La aplicación está compuesta de 3 componentes: un cliente (browser), un servicio de Login y uno de Autenticación corriendo cada uno en una máquina virtual independiente en AWS.

Descripción Arquitectura Descripción detallada

Cada servicio cuenta con un certificado propio, y el servicio LoginService cuenta con autorización para hacer una solicitud GET a AuthService para autenticar el usuario y darle la bienvenida a la página web segura. Se maneja una comunicación segura a través de https.

Adicionalmente se maneja una encriptación para aumentar la seguridad de la contraseña, con SHA-256 en la comunicación.

Diseño de la arquitectura de la aplicación 📝

AG

  • El Cliente, a través de quien se realizará las solitudes de autenticación sobre el servicio LoginService. Nuestra máquina local a través de un browser.

  • La aplicación web LoginService corre por el puerto 4567.

    📍Tiene 1 endpoint:

    • GET /auth, que permite recibir el username y password del usuario, revisando la completitud de los parámetros (credenciales) requeridos para luego consumir el AuthService y finalmente autenticar el usuario.
  • La aplicación web AuthService corre por el puerto 4500.

    📍Tiene 1 endpoint:

    • GET /auth, recibe las credenciales y valida con el único usuario autorizado el acceso a este. Retorna un mensaje de login y autenticación exitoso seguido de una bienvenida con el nombre del usuario.

Escalar la arquitectura de seguridad para incorporar nuevos servicios despliegue

La arquitectura se puede escalar por medio de la generación de certificados propios de los nuevos servicios y la inclusión del certificado del nuevo servicio el archivo myTrustStore, para autorizar el acceso desde la que recibimos las credenciales, en el directorio de los certificados autorizados de LoginService. Así como conectando un endpoint del servicio principal para consumir el nuevo.

1. Usando los siguientes comandos poder generar, un par de llaves públicas y privadas y un certificado. Y los almacenamos todo en un archivo protegido. Se hace uso del formato PKCS12, un formato estándar para almacenar llaves y certificados.

keytool -genkeypair -alias ecikeypair -keyalg RSA -keysize 2048 -storetype PKCS12 -keystore ecikeystore.p12 -validity 3650

Nota: usamos “localhost” o "url de la aplicación desplegada en aws" como nombre del certificado cuando se lo pida la herramienta.

2. Exportamos el certificado a un archivo

keytool -export -keystore ./ecikeystore.p12 -alias ecikeypair -file ecicert.cer

3. Finalmente, importamos el certificado a un myTrustStore

keytool -import -file ./ecicert.cer -alias firstCA -keystore myTrustStore

Adicionalmente, aunque se realizó el ejercicio con las mejores prácticas de clean code y las aplicaciones de 12 factores posibles, algunas de ellas quedan por fuera para efecto de la práctica, pero para escalarla deben tenerse en cuenta:

La aplicación de 12 factores es una metodología para construir aplicaciones de software como servicio.

Algunas de ellas incluyen:

  • Almacenar la configuración en el entorno de la aplicación, variables de entorno. No dejarlas como constantes en el código.
  • Manejadores de recursos para la base de datos, Memcached y otros servicios de respaldo Credenciales para servicios externos como Amazon S3 o Twitter
  • Valores por despliegue como el nombre de host canónico para el despliegue.
  • Utilizar formatos declarativos para la automatización de la configuración, con el fin de minimizar el tiempo y el coste para los nuevos desarrolladores que se incorporen al proyecto.
  • Tener un contrato limpio con el sistema operativo subyacente, ofreciendo la máxima portabilidad entre entornos de ejecución.
  • Hacer la aplicación apta para el despliegue en plataformas de nube modernas, obviando la necesidad de servidores y administración de sistemas.
  • Minimizar la divergencia entre desarrollo y producción, permitiendo el despliegue continuo para una máxima agilidad.
  • Escalar sin cambios significativos en las herramientas, la arquitectura o las prácticas de desarrollo.

Finalmente agregando una base de datos para almacenar las credenciales con el hash de la contraseña se puede escalar eficientemente, de momento solo tiene un único usuario, quemado en código. Así será posible crear nuevos usuarios que también sean autorizados.

AWS Video experimental en AWS

Se puede encontrar a continuación ver video

Herramientas utilizadas

Nombre Uso
Maven Maven Gestión y construcción del proyecto
Eclipse IDE Eclipse Plataforma de desarrollo
Git Git Sistema de control de versiones
Github Github Respositorio del código fuente
Amazon Web Services AWS Plataforma de producción en la nube

Autor Autor

Laura Alejandra Izquierdo Castro

arep_taller_secureapps's People

Contributors

alizeci avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.