OAuth2 Demo App para la materia Criptografía y Seguridad Informática [66.69][86.36]
El presente repositorio contiene dos aplicaciones web para demostrar el flujo de autenticación y autorización OAuth2 presentado en la materia de Criptografía y Seguridad Informática de la FIUBA.
Aplicaciones
Ambos servicios se encuentra hoy deployados en la plataforma de Heroku:
- Web Application (client): https://fiuba-cripto-6669-8636-web.herokuapp.com/
- Authorization Server: https://fiuba-cripto-6669-8636-authz.herokuapp.com/
./packages/web-server/
Web ServerLa primer application es un simple servidor web con dos pantallas implementadas. Una pública y otra privada. La pantalla privada requiere previa autenticación y autorización por parte del usuario para que la aplicación (Cliente en el modelo OAuth2) pueda solicitar información privada para mostrar de este. Como Cliente OAuth2, la aplicación web se encuentra registrada en el Authorization Server, identificada por el uso de un client_id
y client_secret
.
La misma se ha construido utilizando paquetes y librerías de código abierto. Algunas de notable mención son:
./packages/authz-server/
Authz ServerLa segunda aplicación implementa un Authorization Server. El mismo se ha construido por simple utilización de una librería de código abierto que simplifica la interfaz de construcción de servidores OAuth. La implementación de la intefaz para un Authorization Server que permite realizar el flujo de Code Exchange
se encuentra en ./packages/authz-server/lib/adapter.
Algunas de las librerías de código abierto notables de mención son:
Instalación
Para correr las aplicaciones primero se debe tener instalado NodeJS en el sistema operativo. Una vez instalado, y descargados (o clonados) los archivos de este repositorio, debe correr el siguiente comando desde el directorio raiz del proyecto:
npm install
Inicialización
Es necesario correr las dos aplicaciones de forma paralela para poder observar el flujo completo.
Para correr el servidor del Authorization Server, desde la linea de comando debe correr el siguiente script:
SERVER=authz npm run start
Para correr el servidor de la Aplicación Web (el cliente), desde la linea de comando (una adicional) debe correr el siguiente script:
SERVER=web npm run start
Almacenamiento
Ambas aplicaciones tienen la posibilidad de correr dos modos de almacenamiento:
- En Memoria
- MongoDB
Modo de almacenamiento en memoria
Es el modo de almacenamiento por defecto. Todos los datos necesarios para correr el Authorization Server son cargados desde un archivo estático ubicado en el directorio de ./packages/authz-server/lib/db/fixtures.
Modo de almacenamiento en MongoDB
El modo de almacenamiento en MongoDB puede especificarse agregando la variable de entorno STORE_PROVIDER=mongodb
al momento de correr cualquiera de los servidores. Por ejemplo:
SERVER=authz STORE_PROVIDER=mongodb npm run start
DATABASE_URL
cuando ejecuta el comando de inicio de los servicios. Por ejemplo:
SERVER=web DATABASE_URL=mongodb://localhost:27027/my-db npm run start
Por defecto la URL utiliza localhost
como dominio local a ubicar la base de datos de MongoDB.
Fixtures
Para que el modo de almacenamiento en MongoDB funcione para el Authorization Server es necesario incertar primero en la base de datos los fixtures desde el archivo estático ubicado en ./packages/authz-server/lib/db/fixtures.
Esta tarea puede realizarse de dos maneras posibles. La primera sería corriendo el comando de migración de datos a mano, empleando el comando
DATABASE_URL=<llenar-con-mongodb-database-uri> npm run migrations:run
La segunda forma y quizá la más segura para no estar manipulando el usuario y password para conectarse a la base de datos, es dejar que el Authorization Server corra las migraciones cuando se inicializa. Para ello, hay que agregar las siguientes dos variables de entorno al comando que corre:
SERVER=authz DATABASE_URL=<llenar-con-mongodb-database-uri> RUN_MIGRATIONS=true npm run start