Passer au contenu principal
Google Cloud Endpoints (GCE) est un système de gestion d’API qui offre des fonctionnalités pour vous aider à créer, à maintenir et à sécuriser vos API. GCE utilise OpenAPI pour définir les points de terminaison, les données d’entrée et de sortie, les erreurs et la description de sécurité de votre API. Pour en savoir plus sur la spécification OpenAPI, consultez le dépôt OpenAPI Specification sur GitHub. Ce tutoriel explique comment sécuriser Google Cloud Endpoints avec Auth0.

Prérequis

Avant de commencer, vous devez disposer d’une API GCE déployée. Si vous n’avez pas encore créé d’API, suivez le guide de démarrage rapide de Cloud Endpoints dans la documentation de Google. Ce guide de démarrage rapide vous montrera comment créer une API GCE simple avec un seul point de terminaison, /airportName, qui renvoie le nom d’un aéroport à partir de son code IATA à trois lettres.

Définir l’API dans Auth0

Accédez à Auth0 Dashboard > Applications > APIs et créez une nouvelle API.
Dashboard - Créer des API - Intégrations - Google Endpoints
Prenez en note l’identifiant Audience de l’API (http://google_api dans la capture d’écran ci-dessus) pour l’utiliser à l’étape suivante.

Mettre à jour la configuration de l’API

Ensuite, nous allons mettre à jour le fichier de configuration OpenAPI de l’API GCE. Pour l’API d’exemple créée dans le guide de démarrage rapide, ce fichier est openapi.yaml.

Ajouter des définitions de sécurité

Ouvrez le fichier de configuration et ajoutez une nouvelle section securityDefinitions. Dans cette section, ajoutez une nouvelle définition (auth0_jwt) avec les champs suivants :
ChampDescription
authorizationUrlL’URL d’autorisation. Elle doit être définie sur "https://{yourDomain}/authorize"
flowLe flux utilisé par le schéma de sécurité OAuth2. Les valeurs valides sont "implicit", "password", "application" ou "accessCode".
typeLe type de schéma de sécurité. Les valeurs valides sont "basic", "apiKey" ou "oauth2"
x-google-issuerL’émetteur des informations d’identification. Il doit être défini sur "https://{yourDomain}/"
x-google-jwks_uriL’URI du jeu de clés publiques servant à valider la signature du JSON Web Token (JWT). Définissez-la sur "https://\{yourDomain}/.well-known/jwks.json"
x-google-audiencesL’identifiant de l’API. Assurez-vous que cette valeur correspond à celle que vous avez définie dans l’Auth0 Dashboard pour l’API.

Mettre à jour le point de terminaison

Mettez maintenant à jour le point de terminaison en y ajoutant un champ security avec le securityDefinition créé à l’étape précédente.
paths:
  "/airportName":
    get:
      description: "Get the airport name for a given IATA code."
      operationId: "airportName"
      parameters:
        -
          name: iataCode
          in: query
          required: true
          type: string
      responses:
        200:
          description: "Success."
          schema:
            type: string
        400:
          description: "The IATA code is invalid or missing."
      security:
       - auth0_jwt: []
Dans l’exemple ci-dessus, le champ security indique au proxy GCE que notre chemin /airportName doit être protégé à l’aide de la définition auth0-jwt. Après avoir mis à jour la configuration OpenAPI, elle devrait ressembler à ceci :

Redéployez l’API

Ensuite, redéployez votre API sur GCE pour appliquer les modifications de configuration. Si vous avez suivi le guide de démarrage rapide de Cloud Endpoints, vous pouvez la redéployer en saisissant ce qui suit dans le Cloud Shell de Google’:
cd endpoints-quickstart/scripts
./deploy_api.sh

Tester l’API

Une fois le redéploiement effectué, refaites un appel à l’API sans sécurité. Vous obtiendrez la réponse suivante :
{
 "code": 16,
 "message": "JWT validation failed: Missing or invalid credentials",
 "details": [
  {
   "@type": "type.googleapis.com/google.rpc.DebugInfo",
   "stackEntries": [],
   "detail": "auth"
  }
 ]
}
C’est exactement ce que nous voulons ! Maintenant, allez à la page Test de la définition de votre API Google Endpoints dans le Auth0 Dashboard, puis copiez le sous la réponse : Effectuez une requête GET vers votre API avec un en-tête Authorization de Bearer {ACCESS_TOKEN} pour y accéder de façon autorisée : C’est tout !