Aller au contenu principal

Authentification

Chaque utilisateur Lagertha doit être authentifié pour pouvoir utiliser l'API Lagertha

Un utilisateur authentifié est un utilisateur qui dispose d'un access_token valide

Tout les appels API authentifié doivent contenir le header Authorization avec comme valeur Bearer <access_token>

Pour recuperer l'access_token Lagertha, il existe deux possibilités:

  • OpenId connect
  • Oauth

Méthode 1: OpenId connect

Authentification après de l'API Lagertha

Envoyez une requête POST pour authentifier l'utilisateur et obtenir un access_token.

curl -X POST https://<BAS_URL>:<PORT>/auth \
-H "Content-Type: application/json" \
-d '{
"login": "<LOGIN_SUPER_ADMIN>",
"password": "<PASSWORD_SUPER_ADMIN>",
"application_id": 0,
"fingerprint": "<UNIQUE_DEVICE_ID>"
}'

réponse

{
"access_token": "<access_token>",
"token_type": "Bearer",
"refresh_token": "<refresh_token>",
"open_id": "<open_id>"
}

Stockez l'access_token côté client pour une utilisation ultérieure.

Authentification auprès de l'API tierce

Utilisez l'open_id pour vérifier la validité auprès de l'API tierce.

curl -X POST https://<BAS_URL>:<PORT>/oidc/verify \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <access_token_third_part_api>" \
-H "X-NONCE: <RANDOM_NONCE>" \
-H "X-FINGERPRINT: <UNIQUE_DEVICE_ID> \
-d '{
"open_id_token": "<open_id>"
}'


réponse

{
"id": "string",
"email": "string",
"firstname": "string",
"lastname": "string",
"login": "string",
"roles": [
"string"
],
"created_at": "string"
}

si le jeton est valide, vous recevrez en retour les informations de l'utilisateur

L'API tierce peux connecter le user et lui fournir son propre jeton d'authentification

Méthode 2: Oauth

Authentification auprès de l'API tierce

L'API tierce genère un code unique (state) et verifie Auprès de l'API Lagertha si un utilisateur existe en lui fournissant sont id

curl -X GET https://<BAS_URL>:<PORT>/oauth/token?client_id=<CLIENT_ID>&state=<STATE> \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <access_token_third_part_api>" \
-H "X-NONCE: <RANDOM_NONCE>" \
-H "X-FINGERPRINT: <UNIQUE_DEVICE_ID> \

en retour, l'API tierce récupere un authorisation_code

{
"authorization_code": "string"
}

L'API tierce peux connecter le user en lui fournissant son jeton d'accès + l'authorisation_code ainsi que le state généré

Validation et echange de l'authorisation_code

le client peux desormais echanger son authorisation_code contre un access_token auprès de l'API Lagertha

curl -X POST https://<BAS_URL>:<PORT>/oauth/authorize \
-H "Content-Type: application/json" \
-d '{
"authorization_code": "<AUTHORIZATION_CODE>",
"state": "<STATE>",
"application_id": 0,
"fingerprint": "<UNIQUE_DEVICE_ID>"
}'

en retour, vous récuperez un access_token

{
"access_token": "<access_token>",
"token_type": "Bearer",
"refresh_token": "<refresh_token>",
"open_id": "<open_id>"
}

Utilisation du Refresh Token

Un refresh_token est également retourné lors de l'authentification initiale. Ce token permet d'obtenir un nouveau access_token sans nécessiter une ré-authentification complète.

Renouvellement du Access Token

Pour renouveler un access_token, envoyez une requête POST avec le refresh_token.

curl -X POST https://<BASE_URL>:<PORT>/auth/refresh \
-H "Content-Type: application/json" \
-d '{
"refresh_token": "<refresh_token>",
"application_id": 0,
"fingerprint": "<UNIQUE_DEVICE_ID>"
}'

Réponse:

{
"access_token": "<new_access_token>",
"token_type": "Bearer",
"refresh_token": "<new_refresh_token>"
}

Stockez le nouveau access_token et refresh_token côté client pour une utilisation ultérieure.

Authentification à Deux Facteurs (MFA)

Pour améliorer la sécurité, l'API Lagertha supporte l'authentification à deux facteurs (MFA). Cela ajoute une couche de sécurité supplémentaire en exigeant un code de vérification en plus du mot de passe.

Activation de la MFA

Pour activer la MFA, l'utilisateur doit générer un code TOTP (Time-based One-Time Password).

curl -X GET https://<BASE_URL>:<PORT>/users/2fa/code \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <access_token>"

Réponse:

{
"totp_url": "<totp_url>"
}

L'utilisateur peut utiliser cette URL pour configurer son application d'authentification (comme Google Authenticator).

Vérification et Activation de la MFA

L'utilisateur vérifie le code TOTP pour activer la MFA.

curl -X PUT https://<BASE_URL>:<PORT>/users/2fa/activate \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <access_token>" \
-d '{
"code": "<TOTP_CODE>",
"is_activate": true
}'

Authentification avec MFA

Après avoir activé la MFA, l'utilisateur doit fournir le code TOTP à chaque connexion.

curl -X POST https://<BASE_URL>:<PORT>/auth \
-H "Content-Type: application/json" \
-d '{
"login": "<LOGIN_SUPER_ADMIN>",
"password": "<PASSWORD_SUPER_ADMIN>",
"application_id": 0,
"fingerprint": "<UNIQUE_DEVICE_ID>",
"code_2fa": "<TOTP_CODE>"
}'

Réponse :

{
"access_token": "<access_token>",
"token_type": "Bearer",
"refresh_token": "<refresh_token>",
"open_id": "<open_id>"
}