Esta es una distribución pública del sistema de autenticación de Mi Argentina (basado en la especificación OpenID Connect), el portal digital del ciudadano desarrollado por la Subsecretaría de Gobierno Digital de la República Argentina en el periodo 2015-2019.
La intención de esta distribución es la reutilización por parte de gobierno nacionales y subnacionales que deseen construir sus plataforma de servicios para ciudadanos.
Esta versión cuenta con las siguientes funcionalidades:
- Inicio de sesión
- Registro
- Recupero de contraseña
- Flujo de verificación de correo electrónico
- Envío de mails
- ABM de datos de la cuenta
- Borrar cuenta
- ABM de clientes OpenID
- Configuración de scopes OpenID
- Middlewares
- Tracking de errores
- Python >= 3.8
- PostgreSQL >= 12
- Redis >= 4.0.9
- Docker
git clone https://github.com/argob/id-mi-argentina-distro.git
cp settings_custom.py.edit settings_custom.py
docker-compose -f local.yml build
docker-compose -f local.yml up
docker-compose -f local.yml run --rm django python manage.py setup
MIDDLEWARE = [
...
# Verificación obligatorio del correo electrónico
'id.middleware.EmailValidatedMiddleware',
# Términos y condiciones obligatorio
'id.middleware.TermsAndConditionsMiddleware',
]
Usamos Celery
para realizar tareas asíncronas, por ejemplo, los envios de mails y usamos Flower
para su monitoreo
Para el entorn de desarrollo usamos MAILHOG
.
Aca el link para acceder a su dashboard.
EMAIL_BACKEND = env(
"DJANGO_EMAIL_BACKEND", default="django.core.mail.backends.smtp.EmailBackend"
)
EMAIL_TIMEOUT = 5
EMAIL_USE_TLS = False
EMAIL_HOST = env("EMAIL_HOST", default="mailhog")
EMAIL_PORT = env("EMAIL_PORT", default="1025")
AnyMail
ANYMAIL = {
"MAILGUN_API_KEY": "",
"MAILGUN_SENDER_DOMAIN": "",
}
EMAIL_BACKEND = "anymail.backends.mailgun.EmailBackend"
Más info en la documentación oficial
Habilita OpenID Connect Session Management 1.0 para monitorear el estado del login del usuario final. Ver más detalle
MIDDLEWARE_CLASSES = [
...
'oidc_provider.middleware.SessionManagementMiddleware',
]
OIDC_SESSION_MANAGEMENT_ENABLE = True
OIDC_UNAUTHENTICATED_SESSION_MANAGEMENT_KEY = ''
OIDC_IDTOKEN_PROCESSING_HOOK = 'id.oidc_provider_settings.default_idtoken_processing_hook'
OIDC_IDTOKEN_SUB_GENERATOR = 'id.oidc_provider_settings.custom_sub_generator'
OIDC_EXTRA_SCOPE_CLAIMS = 'id.oidc_provider_settings.CustomScopeClaims'
OIDC_USERINFO = 'id.oidc_provider_settings.userinfo'
El alta se encuentra en la sección http://localhost:8000/admin/oidc_provider/client/
-
confidential
: Clientes capaces de mantener la confidencialidad de sus credenciales (por ejemplo, cliente implementado en un servidor seguro con acceso restringido a las credenciales del cliente). -
public
: Clientes que no son capaces de mantener la confidencialidad de sus credenciales (por ejemplo, clientes que se ejecutan en el dispositivo utilizado por el propietario del recurso, como una aplicación nativa instalada o una aplicación basada en navegador web), y tampoco capaces de asegurar la autenticación del cliente por cualquier otro medio. -
name
: Nombre legible de tu cliente OpenID -
client_type
: Los valores sonconfidential
opublic
-
client_id
: Identificación única del cliente -
client_secret
: Valor secreto para aplicaciones confidenciales -
response_types
: Los flujos y los valores asociadosresponse_type
que puede utilizar el cliente -
jwt_alg
: Los clientes pueden elegir qué algoritmo se utilizará para firmar id_tokens. Los valores son HS256 y RS256 -
date_created
: La fecha se añade automáticamente cuando se crea -
redirect_uris
: Lista de URIs de redirección -
require_consent
: Si esta opción está seleccionada, el servidor nunca pedirá consentimiento (sólo se aplica a clientes confidenciales). -
reuse_consent
: Si está habilitado, el Servidor guardará el consentimiento del usuario dado a un cliente específico, de modo que no se le pedirá al usuario la misma autorización varias veces.