Utiliser Okta pour authentifier les utilisateurs
Cette page explique comment permettre l'authentification des utilisateurs dans API Gateway.
Pour authentifier un utilisateur, une application cliente doit envoyer un jeton Web JSON (JWT) dans l'en-tête d'autorisation de la requête HTTP envoyée à votre API backend. API Gateway valide le jeton au nom de votre API, de sorte que vous n'ayez pas à ajouter de code dans votre API pour traiter l'authentification. Toutefois, vous devez configurer la configuration de l'API pour votre passerelle afin qu'elle soit compatible avec les méthodes d'authentification que vous avez choisies.
API Gateway valide un jeton JWT de manière optimale à l'aide du jeu de clés Web JSON (JWKS) de l'émetteur de jetons JWT. L'emplacement des JWKS est spécifié dans le champ x-google-jwks_uri
de la configuration d'API de la passerelle. API Gateway met en cache le JWKS pendant cinq minutes et l'actualise toutes les cinq minutes.
Avant de commencer
- Ajoutez un code d'authentification à l'application cliente, en suivant les instructions du guide d'intégration d'Okta pour Google Cloud Endpoints.
-
Lorsqu'une application cliente envoie une requête HTTP, l'en-tête d'autorisation
de la requête doit contenir les revendications suivantes :
iss
(émetteur)sub
(objet)aud
(cible)iat
(date/heure d'émission)exp
(date/heure d'expiration)
Configurer API Gateway pour l'authentification client
Vous devez disposer d'un objet d'exigences de sécurité et d'un objet de définitions de sécurité dans votre configuration d'API pour que API Gateway valide les revendications dans le jeton JWT signé.
Comme expliqué dans le guide d'intégration d'Okta pour Google Cloud Endpoints, vous apportez les modifications suivantes à votre document OpenAPI :
Ajoutez le code suivant à la définition de sécurité dans votre configuration d'API, qui respecte le schéma de sécurité OpenAPI 2.0. Remplacez
YOUR_OKTA_TENANT_NAME
par le nom de votre locataire Okta etYOUR_OKTA_CLIENT_ID
avec l'ID client que vous avez créé dans votre locataire Okta.securityDefinitions: okta_jwt: authorizationUrl: "" flow: "implicit" type: "oauth2" x-google-issuer: "https://YOUR_OKTA_TENANT_NAME.com" x-google-jwks_uri: "https://YOUR_OKTA_TENANT_NAME.com/oauth2/v1/keys" x-google-audiences: "YOUR_OKTA_CLIENT_ID"
Ajoutez une section de sécurité au niveau de l'API pour une application à l'ensemble de l'API, ou au niveau de la méthode pour une application à une méthode spécifique.
security: - okta_jwt: []
Vous pouvez définir plusieurs définitions de sécurité dans la configuration de l'API, mais l'émetteur doit être différent pour chaque définition. Notez que, si vous utilisez des sections de sécurité au niveau de l'API et au niveau de la méthode, les paramètres au niveau de l'API seront ignorés.
Le champ x-google-audiences
n'est pas obligatoire. API Gateway
accepte tous les jetons JWT avec le nom du service de backend sous la forme suivante :
https://SERVICE_NAME
dans la revendication aud
.
Pour autoriser des ID client supplémentaires à accéder au service de backend, vous pouvez spécifier le paramètre
d'identifiants clients autorisés dans le champ x-google-audiences
en utilisant
des valeurs séparées par une virgule. API Gateway accepte ensuite les jetons JWT avec n'importe lequel des
les numéros clients spécifiés dans la revendication aud
.
Effectuer un appel authentifié à une API API Gateway
Lorsque vous envoyez une requête à l'aide d'un jeton d'authentification, nous vous recommandons de placer ce jeton dans l'en-tête Authorization:Bearer
. Exemple :
curl --request POST \ --header "Authorization: Bearer ${TOKEN}" \ "${GATEWAY_URL}/echo"
Ici, GATEWAY_URL
et TOKEN
sont des variables d'environnement contenant votre
l'URL de la passerelle déployée et le jeton d'authentification, respectivement. Voir
Envoyez une requête authentifiée à une API API Gateway pour obtenir un exemple de code qui envoie une requête à l'aide de l'en-tête Authorization:Bearer
.
Si vous ne pouvez pas utiliser l'en-tête lors de l'envoi de la requête, vous pouvez placer le jeton d'authentification dans un paramètre de requête appelé access_token
. Par exemple :
curl "${GATEWAY_URL}/echo?access_token=${TOKEN}"
Recevoir les résultats authentifiés dans votre API
API Gateway transfère généralement tous les en-têtes reçus. Toutefois, elle remplace
en-tête Authorization
d'origine lorsque l'adresse du backend est spécifiée par
x-google-backend
dans la configuration de l'API.
API Gateway enverra le résultat de l'authentification dans X-Apigateway-Api-Userinfo
à l'API backend. Il est recommandé d'utiliser cet en-tête à la place de l'en-tête Authorization
d'origine. Cet en-tête est encodé en base64url
et contient la charge utile JWT.