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 conteneurhydra-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 |