Go to file
Matthieu Lamalle 72e912facb
Some checks reported warnings
Cadoles/hydra-sql/pipeline/head This commit is unstable
Merge pull request 'Maj env et doc' (#26) from redis-sentinel into develop
Reviewed-on: #26
2023-12-12 08:48:57 +01:00
assets traductions, sentry, form, mariadb, assets 2022-12-13 15:46:24 +01:00
bin first commit 2022-04-07 11:49:17 +02:00
config Maj env et doc 2023-12-12 08:47:41 +01:00
misc feat: keep up with technical debt 2023-12-11 14:41:20 +01:00
public maj manifest 2023-01-10 17:03:00 +01:00
src ajout commentaire 2023-12-11 14:13:35 +01:00
templates issue-12: implémentation redis pour la gestion des session 2023-06-12 15:26:56 +02:00
tools/php-cs-fixer php-cs-fixer 2022-05-04 17:13:04 +02:00
translations ajout de l'updatde hashage selon algo indiqué en ver env, fix typo 2022-12-16 15:00:14 +01:00
.dockerignore feat: keep up with technical debt 2023-12-11 14:41:20 +01:00
.env Maj env et doc 2023-12-12 08:47:41 +01:00
.gitignore feat: keep up with technical debt 2023-12-11 14:41:20 +01:00
.trivyignore.yaml feat: keep up with technical debt 2023-12-11 14:41:20 +01:00
composer.json issue-12: implémentation redis pour la gestion des session 2023-06-12 15:26:56 +02:00
composer.lock issue-12: implémentation redis pour la gestion des session 2023-06-12 15:26:56 +02:00
composer.phar environnement complet autonome, révision complete de la méthode, ajout de configuration 2022-12-09 17:31:07 +01:00
docker-compose.yml feat: keep up with technical recommandations 2023-12-11 14:33:28 +01:00
Jenkinsfile feat: keep up with technical debt 2023-12-11 14:41:20 +01:00
Makefile feat: keep up with technical debt 2023-12-11 14:41:20 +01:00
package-lock.json maj manifest 2023-01-10 17:03:00 +01:00
package.json maj manifest 2023-01-10 17:03:00 +01:00
readme.md Maj env et doc 2023-12-12 08:47:41 +01:00
webpack.config.js maj manifest 2023-01-10 17:03:00 +01:00

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

Usage

Dans le cas d'utilsation du thème pour personaliser la page de login

Développement

Un environnement Docker Compose est proposé comme support de développement.

Afin de démarrer celui-ci:


# Démarrer l'environnement docker-compose
make up

# fermer l'environnement
make down

Variables d'environnement

DB_USER="lasql"
DB_PASSWORD="lasql"

ISSUER_URL="http://localhost:8000"
BASE_URL='http://localhost:8080'
# connexion hydra
HYDRA_ADMIN_BASE_URL='http://hydra:4445'
DSN_REMOTE_DATABASE="pgsql:host='postgres';port=5432;dbname=lasql"
APP_LOCALES="fr,en"
HASH_ALGO_LEGACY="sha256, bcrypt"
SECURITY_PATTERN="password,salt,pepper"
REDIS_DSN="redis://redis:6379
PEPPER=

Tests password

Dans le cas où plusieurs méthodes de hashage cohabitent (migration de méthode par exemple dans l'application principale), toutes les méthodes indiquées dans HASH_ALGO_LEGACY seront testées pour comparer les hashs jusqu'à un succès

Pattern de hashage

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

Postgres

Pour choisir la base de donnée à utiliser, modifier la variable d'environnement DSN_REMOTE_DATABASE

Les mot de passe inscrits en bdd sont hachés en tenant compte du salt si non vide (cf données de la bdd plus bas) et du pepper inscrit en variable d'environnement (généré avec : bin2hex(random_bytes(32)) pour l'exemple), le pepper peut être vide
Indiquer le nom de la colonne contenant le salt:
Il faut inscrire dans slq_login_configuration salt_column_name: salt
Indiquer le pepper utilisé:
et conserver le pepper dans service.yaml
env(PEPPER): "257d62c24cd352c21b51c26dba678c8ff05011a89022aec106185bf67c69aa8b"

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'

mariadb

En plus de tester la connexion à une différente base de donnée, on teste le hashage de password sans salt ni pepper
Il faut mettre dans sql_login_configuration salt_column_name: ~
et dans service.yaml
env(PEPPER): ~

test connexion mariadb

Modifier la variable d'environnement avec cette valeur
DSN_REMOTE_DATABASE="mysql:host=mariadb;port=3306;dbname=lasql;"

Données de test

Des données de test sont chargées au lancement de l'environnement. Le mot de passe est 123456 dans tous les cas, mais il est hashé différemment.

Pour utiliser ces données de test avec postgres, vérifier la configuration de salt et de pepper pepper doit être configuré avec l'exemple mis ci-dessus env(PEPPER) il faut aussi indique la sql_login.yaml à salt la valeur salt (qui correspond au nom de colonne contenant le salt dans la bdd postgres)

postgres

|email|password|salt|lastname|firstname
    |test1@test.com| 8ad4025044b77ae6a5e3fcf99e53e44b15db9a4ecf468be21cbc6b9fbdae6d9f| cesaltestunexemple| Locke|John|
    |test2@test.com| 50626fa21f45a275cea0efff13ff78fd02234cade322da08b7191c7e9150141d| NULL| Dubois| Angela|
    |test3@test.com| 504ae1c3e2f5fdaf41f868164dabcef21e17059f5f388b452718a1ce92692c67| cesaltestunautreexemple| Dupont| Henri|
    |test4@test.com| $2a$12$91AHN7WFXieeadvUfZ88mO.9N7oS5adeXbdERnRno9oLAbqqDW4IG| NULL| Durand|Isabelle|

A noter que le hash de test4 est hashé avec l'algo bcrypt

mariadb (sans salt)

|email|password|lastname|firstname
    |test1@test.com| 8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92| Sassot|Charles|
    |test2@test.com| 8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92| Dubois| Angela|
    |test3@test.com| 8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92| Dupont| Henri|
    |test4@test.com| 8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92| Durand|Isabelle|

configuration

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

pdo_configuration/pdo.yaml

sql_login:
  login_column_name: email
  password_column_name: password
  salt_column_name: ~
  table_name: usager
  data_to_fetch:
    - email
    - lastname
    - firstname

Conteneurs

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