Contrôle des accès
Accès non authentifié à un service
Afin de profiter de l'absence d'authentification (pas de test de présence de token), le front recevant la requête doit connaître les routes ouvertes (que ce soit un point d'accès en entier ou une sous partie des routes d'un point d'accès) et ne pas rentrer dans le processus de validation de l'authentification / autorisation.
Exemples :
- Point d'accès WMTS ouvert : geo.api.gouv.fr/open/wmts
- Certaines routes du point d'accès API Entrepôt : api.gouv.fr/api/v1/ → /catalogs
Accès authentifié à un service de gestion
L'authentification est forte et gérée par l'IAM. Les habilitations globale au service de gestion sont défini au niveau de l'IAM. Les autorisations plus fines, plus métiers, sont gérées par le service lui même. On peut imaginer que certaines routes du service de gestion peuvent être non authentifiée. Plusieurs
sequenceDiagram
participant U as Utilisateur
participant I as IAM
participant F as Front
participant S as Service
U ->> I : Envoie une requête d'authentification
activate I
I ->> I: Contrôle les paramètres d'authentification (login / mot de passe)
alt Paramètres corrects
I -->> U: Retourne le jeton de session
else
I -->> U: Retourne une erreur
end
deactivate I
U ->> F: Réalise un appel API muni du jeton
activate F
F ->> I: Demande si le jeton est valide
activate I
I ->> I: Contrôle la validité du jeton
alt Jeton non valide
I -->> F: NOK
F -->> U: Retourne une erreur d'authentification
else
I -->> F: OK
F ->> S: Transmet l'appel API
activate S
S ->> S: Traite la requête
S -->> F: Retourne la réponse (peut être une erreur d'autorisation)
deactivate S
F -->> U: Transmet la réponse de l'API
end
deactivate I
deactivate F
Accès authentifié à un service de diffusion
Le mécanisme d'autorisation est trop métier pour être confié à l'IAM. De plus, on veut des authentifications plus légères. Ces authentifications légères et les autorisations ne sont pas gérées par le service de diffusion mais par un service tiers.
sequenceDiagram
participant U as Utilisateur
participant F as Front
participant K as IAM
participant A as API
participant S as Service de diffusion
U ->> F : Demande de la donnée
F ->> F : Extraie les informations d'authentification <br/>et la couche et service interrogés
opt Si présence d'un token
F ->> K : Valide le token
alt Token valide
K -->> F : OK
F ->> A : Demande si la requête est autorisée <br/>(avec toutes les informations extraites)
A ->> A : Identifie la clé utilisée à partir des informations d'authentification
A ->> A : Identifie l'offre à partir du nom de couche et du service
A ->> A : Vérifie le lien entre les 2
alt Clé et offre existent et le lien entre les deux aussi, ou que l'offre est "open"
A -->> F : OK
F ->> S : Transmet la requête
S -->> F : Réponse
F -->> U : Réponse
else La clé n'existe pas
A -->> F : NOK
F -->> U : Requête non authentifiée
else L'offre n'existe pas (ou est désactivée)
A -->> F : NOK
F -->> U : Ressource non trouvée
else La clé n'a pas accès à l'offre
A -->> F : NOK
F -->> U : Requête non autorisée
end
else
K -->> F : NOK
F -->> U : Requête non autorisée
end
end