FIUBAuth
Prototipo de un sistema de autenticación y autorización basado en OpenID Connect, para ser usado en la Facultad de Ingeniería de la Universidad de Buenos Aires.
Set-up
Se recomienda trabajar en un ambiente virtual (aqui se utiliza venv):
$ python3 -m venv fiubauth_venv
$ source fiubauth_venv/bin/activate
Para instalar las librerias necesarias:
$ pip install -r requirements.txt
Para crear la base de datos y darle privilegios a fiubauth:
$ sudo su - postgres
postgres~$ psql
CREATE DATABASE fiubauth_db;
CREATE USER fiubauth WITH PASSWORD 'fiupass';
ALTER ROLE fiubauth SET client_encoding TO 'utf8';
ALTER ROLE fiubauth SET default_transaction_isolation TO 'read committed';
ALTER ROLE fiubauth SET timezone TO 'UTC';
GRANT ALL PRIVILEGES ON DATABASE fiubauth_db TO fiubauth;
Ahora se pueden llevar a cabo las migraciones, generar una clave RSA y crear un superusuario:
$ python manage.py migrate
$ python manage.py creatersakey
$ python manage.py createsuperuser
Uso
Para crear usuarios por el momento se debe hacer programáticamente.
$ python manage.py shell
>>> from django.contrib.auth.models import User
>>> user = User.objects.create_user('mahatmagandhi', 'mahatmagandhi@protonmail.com', 'humanityisanocean')
Este user
puede ser modificado directamente, mientras después se utilice .save()
para guardar los cambios.
En cualquier momento se puede correr el servidor mediante:
$ python manage.py runserver [puerto, predeterminado: 8000]
y encontrarlo en http://localhost:8000.
Endpoints principales:
/admin
(administración)/accounts/login
y/accounts/logout
(inicio y cierre de sesión)/
o/home
(lista los clientes a los cuales el usuario actual dio permisos)/auth
(endpoints que utiliza OIDC)
Registrar clientes (relying parties)
Los clientes son aquellos sitios o servicios que quieran utilizar FIUBAuth para autenticar a sus usuarios. Se los puede registrar mediante la consola de administración.
Dirigirse a /admin
, iniciar sesión como el superusuario creado y dirigirse a la sección Clients para agregar uno nuevo. Ponerle un nombre identificatorio, los response types que se desee (ejemplo: code
, id_token token
), y como redirect_uri aquella del servicio. Para más información ver el ejemplo más abajo o la documentación de la librería OIDC.
Ejemplo de Relying Party
En la carpeta example-rp
acompaña al proyecto un ejemplo mínimo de un servicio que puede usar FIUBAuth para identificar al usuario y obtener información suya. Nota: este ejemplo hace uso de una librería de funciones de OIDC; ver las licencias correspondientes.
Primero debe crearse un cliente (ver más arriba) con por lo menos id_token token
como response_type y redirect_uri apropiada: 'http://localhost:3003'. Al guardarlo tomar nota del CLIENT ID.
Hecho esto, se puede servir la página (asume que fiubauth se encuentra en el puerto 8000 local) mediante:
$ python -m http.server 3003
Dirigirse a http://localhost:3003, setear el client id, guardar, y vea que pasa al iniciar sesión.