138 lines
5.0 KiB
Markdown
138 lines
5.0 KiB
Markdown
# Hydra-sql
|
|
|
|
Une [LoginApp](https://www.ory.sh/docs/hydra/concepts/login) pour le serveur OpenID Connect [Ory/Hydra](https://github.com/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:
|
|
|
|
```bash
|
|
|
|
# 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`
|