Authentification sécurisée sur l’API POSOS
Bon à savoir : cette documentation explique la récupération d’un jeton sécurisé permettant de se connecter aux API POSOS et ne concerne pas l’accès aux entrepôts FHIR
L’API POSOS est protégée par une couche d’authentification Google Cloud Identity-Aware Proxy, permettant d’assurer la sécurité de l’accès aux API et aux données. Cette interface utilise les protocoles OAuth 2 et OpenID Connect pour autoriser les accès, et valide l’identité de l’appelant grâce à une clé privée. Cette clé vous est transmise par POSOS sous forme d’un fichier .json
et est strictement secrète. Elle doit pouvoir être changée rapidement en cas de révocation.
Sur le principe, l’appelant construit un jeton d’accès contenant sa demande, l’envoie à l’API Google Auth qui lui renvoie en retour un jeton d’identité. Cette preuve d’authentification sera ensuite jointe dans l’en-tête des requêtes subséquentes.
La documentation de référence se trouve à l’adresse suivante :
Programmatic authentication | Identity-Aware Proxy | Google Cloud
L’appelant a besoin de deux éléments :
- sa clé privée (fichier
.json
) - un identifiant de Client OAuth propre à l’environnement appelé. Cette chaine de caractère vous est transmise par POSOS en même temps que la clé. Elle est stable pour chaque environnement (
preprod
,production
) - Valeur du Client ID par environnement :
Client ID
20286154155-852pf0ti456nd81ongbiecmjqgag84q3.apps.googleusercontent.com
La demande d’un jeton d’identité peut se faire avec n’importe quelle technologie capable de faire une requête HTTP, mais certains langages disposent de librairies officielles capable de réaliser l’opération automatiquement.
Exemples d’implémentations
Toutes les librairies proposées par Google simplifient la configuration si l’on définit la variable d’environnement GOOGLE_APPLICATION_CREDENTIALS
pour la faire pointer sur le fichier .json
de la clé privée.
- Ce lien propose des exemples dans plusieurs langages :
Obtenir un jeton OIDC pour le compte de service par défaut - Une liste de librairies permettant de construire et signer un JWT est disponible ici :
JWT.IO - JSON Web Tokens Libraries
Exemples
from google.auth.transport.requests import Request
from google.oauth2 import id_token
# La clé privée est dans le fichier désigné par la variable
# d'environnement GOOGLE_APPLICATION_CREDENTIALS
# Le client_id est l'identifiant de client OAuth et
# devrait être fourni par une variable d'environnement aussi
client_id = ".........."
token = id_token.fetch_id_token(Request(), client_id)
# token contient le jeton d'identité à joindre aux requêtes
Envoi des requêtes authentifiées
Le jeton d’identité doit être joint en en-tête des requêtes dans le header Authorization
sous le format Bearer <contenu du jeton>
.
curl --request GET --url 'https://api.preprod.posos.co/[...]' --header 'Authorization: Bearer <token>'