****************************************************************
Clone du dépôt
git clone [email protected]:tm-wong/auth-service.git
Créer un utilisateur PostgreSQL
psql -U superuser -d db_auth_service
CREATE ROLE authsce SUPERUSER LOGIN PASSWORD 'xxx';
Le modèle de la base de données est disponible dans le répertoire SQL (db_auth_service.sql) de ce dépôt, à noter évidemment, qu'il convient de remplacer les données placées en eéchantillon par de véritables données, le moment venu.
Cette API d'authentification permet de récupérer un JSON Web Token en échange d'un nom d'utilisateur et d'un mot de passe, permettant l'accès à une application déchiffrant le token et vérifiant par là l'identité de l'utilisateur.
Pour l'utilisation de ce token, consulter la section 4 "Utilisation du token", un peu plus bas.
Cette application est construite avec Fastify en node.js (v18.15.0) et PostgreSQL (v15.x)
La base URL de cette application est la suivante : https://limitless-savannah-34441-943d2c48f28e.herokuapp.com
Une documentation des routes implémentées est consultable à partir de l'URL suivante : https://limitless-savannah-34441-943d2c48f28e.herokuapp.com/api/doc
Celle-ci liste chacune des routes avec des exemples d'utilisation.
La gestion d'erreurs est assez aisée à mettre en œuvre de façon limpide avec Fastify, puisque en plus d'un dispositif de catchall situé dans le script principal, Fastify est packagé avec son interface de gestion d'erreurs dédiée et permettant d'émettre des erreurs HTTP de façon plutôt simple.
L'application est pourvue d'un catchall pour les logs d'erreurs non catchées.
Il convient toutefois de prévoir de logger celles-ci à l'issue de l'exécution des méthodes les plus sujettes aux imprévus.
Les logs d'appel HTTP et autres sont configurés à l'emplacement /var/log/auth-service/
.
Requérir un token
curl -i -X POST \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-d '{ "user_name": "efinkle0", "passw": "xxxx" }' \
https://server.com/api/auth
HTTP/1.1 200 OK
vary: Origin
access-control-allow-origin: *
content-type: application/json; charset=utf-8
content-length: 988
Date: Sun, 23 Jul 2023 19:57:54 GMT
Connection: keep-alive
Keep-Alive: timeout=72
{
"access_token": "eyJhbGciOiJSUzI1NiJ9.eyJ1c2VyX25h...",
"expires_in": 10800,
"token_type": "Bearer"
}
Utiliser un token
export TOKEN='eyJhbGciOiJSUzI1NiJ9.eyJ1c2VyX25hbWUiOiJlZmlua2xlMCIsImlzcyI6ImF1...'
curl -i \
-H "Authorization: Bearer $TOKEN" \
https://my-super-app.com/api/some/private/route
HTTP/1.1 200 OK
Server: Cowboy
Connection: keep-alive
Vary: Origin
Access-Control-Allow-Origin: *
Content-Type: application/json; charset=utf-8
Content-Length: 1871
Date: Tue, 20 Jun 2023 17:35:28 GMT
Via: 1.1 vegur
.