Skip to content

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