hydra-sql/readme.md

11 KiB

Hydra-sql

Une LoginApp pour le serveur OpenID Connect Ory/Hydra. Elle permet de se connecter à une base de donnée et de vérifier un mot de passe donné sur une mire locale puis d'aller chercher des données demandées

Image

  • L'image standalone est construite en utilisant l'utilisateur www-data pour lancer supervisor (qui va lancer le process php-fpm et caddy, avec ce même user)
  • C'est pour cela qu'on fini par "USER www-data" à la fin de misc/images/hydra-oidc-standalone/Dockerfile, sinon le conteneur hydra-sql ne tournera pas

Configuration

Variables d'environnement

Variable Description Valeur par défaut Utilisation
APP_ENV Environnement symfony prod dev:prod
APP_DEBUG Console de debug symofny false true:false
HYDRA_ADMIN_BASE_URL Url d'admin Hydra ou dispatcher http://hydra:4445 obligatoire
BASE_URL Url d'accès http://localhost:8080 obligatoire
DSN_REMOTE_DATABASE DSN de la BDD postgresql://lasql:lasql@postgres:5432/lasql?serverVersion=15&chartset=utf8
DB_USER User de connection à la BDD lasql obligatoire
DB_PASSWORD PAssword de l'utilisateur de la BDD lasql obligatoire
APP_LOCALES Langues disponibles dans l'application fr,en obligatoire
HASH_ALGO_LEGACY ALgorythme de Hashage par défaut sha256
SECURITY_PATTERN Séquence à employer pour le hashage du mot de passe password,salt,pepper obligatoire
PEPPER Pepper utilisé pour le Hashage
REDIS_DSN DSN du serveur Redis redis://redis:6379 obligatoire
URL_LINK Url pouvant être utilisée dans les liens des templates
CADDY_HTTP_PORT Port d'écoute de l'application 8080
CADDY_HTTPS_PORT Port d'écoute de l'application 8443
CADDY_DATA_FS Chemin vers le répertoire utilisé pour le stockage de caddy /tmp/caddy
CADDY_APP_ROOT_PUBLIC Chemin vers le répertoire utilisé pour servire les fichiers /app/public
CADDY_PHP_INDEX Nom du fichier a utiliser pour servir l'application index.php
CADDY_APP_UPSTREAM_BACKEND_SERVER Adresse du serveur backend FastCGI PHP vers lequel doit être diriger les requêtes PHP. unix//tmp/php-fpm.sock
CADDY_TRUSTED_PROXIES Spécification des adresses IP /plage IP étant sur pour transmettre les requetes HTTP private_ranges
CADDY_LOG_FORMAT Spécification du format des logs console
CADDY_LOG_LEVEL Spécification du niveau de verbosité des logs INFO
PHP_FPM_MEMORY_LIMIT Spécification de la mémoire limite maximale alloué au processus PHP-FPM 128M
PHP_FPM_DISPLAY_ERRORS Afficahge des erreurs dans la sortie du serveur web. off
PHP_FPM_LISTEN Spécification du serveur sur lequel PHP FPM écoute les connexion. /tmp/php-fpm.sock
PHP_FPM_LOG_LEVEL Spécification du niveau de verbosité des logs PHP-FPM notice
PHP_FPM_PM Définition du mode de gestion des processus PHP-FPM dynamic
PHP_FPM_PM_MAX_CHILDREN Définition du nombre maximum de processus enfants que PHP-FPM peut générer 5
PHP_FPM_PM_START_SERVERS Définition du nombre de processus enfants que PHP-FPM va démarrer au lancement de PHP-FPM 2
PHP_FPM_PM_MIN_SPARE_SERVERS Définition du nombre minimum de processus enfants inactifs que PHP-FPM doit conserver en réserve. 1
PHP_FPM_PM_MAX_SPARE_SERVERS Définition du nombre maximum de processus enfants inactifs que PHP-FPM peut conserver en réserve. 3
XDG_DATA_HOME Définition du répertoire de base pour le stockage des données spécifiques à l'utilisateur. /tmp/data

Algorithmes de hashage compatibles

La login app est compatible par défaut avec toutes les méthodes de hashage de PHP et avec SSHA. Aucune configuration supplémentaire n'est nécessaire.

Pattern de hashage

Définir dans la variable SECURITY_PATTERN le pattern utilisé avec les mots clés: password | salt | pepper séparé par des virgules pour représenter la séquence à employer pour le hashage du mot de passe. Exemple : SECURITY_PATTERN="salt,password,pepper"

Schéma de base de donnée

Permet d'adapter les requetes SQL à la base de donnée utilisée en indiquant les noms de colonnes de celle-ci.

# config/sql_login_configuration/sql_login.yaml
sql_login:
  login_column_name: email
  password_column_name: password
  salt_column_name: ~
  table_name: usager
  data_to_fetch:
    - email
    - lastname
    - firstname

Environnement de développement

Tester

Se rendre sur http://localhost:8000/ et cliquer Login pour commencer une nouvelle connexion. 3 utilisateurs d'exemple sont disponible pour les tests:

Login Mot de passe Algorithme
test1@test.com 123456 Bcrypt
test2@test.com 123456 SHA256
test3@test.com 123456 SSHA

Base de donnée

2 bases de données différentes sont disponible pour les tests. Pour choisir la base de donnée à utiliser, modifier les d'environnement relatives à la base de donnée.

  • URL Postgres: postgresql://lasql:lasql@mariadb:3306/lasql?serverVersion=15&chartset=utf8
  • URL Mariadb: mysql://lasql:lasql@postgres:5432/lasql

Redis

La variable REDIS_DSN est obligatoire. Hydra-sql utilise dorénavant Redis pour le stockage du cache et des session. Compatible Redis Sentinel ex : 'redis:?host[redis1:26379]&host[redis2:26379]&host[redis3:26379]&redis_sentinel=mymaster'

Liste des ports

Nom Description Port(s) hôte utilisé(s)
oidc-test Application factice permettant de tester l'authentification OpenID Connect 8080
hydra Serveur Ory/Hydra 8081
hydra-sql Login/Consent/Logout App (ce projet) 8082
postgres Base de donnée postgres support du test et pour hydra 5432
mariadb Base de donnée mariadb support du test 3306
pgadmin pour administrer la base de donnée 8085