Remarques :

Personnaliser la sécurité de votre API à l'aide d'OCI API Gateway et d'OCI Functions

Introduction

Découvrez la synergie transparente entre Oracle Cloud Infrastructure (OCI) Functions et OCI API Gateway pour implémenter une méthode d'authentification personnalisée pour vos API et comment les fonctions peuvent extraire des arguments de la passerelle d'API.

Passerelle d'API OCI

Le service OCI API Gateway vous permet de publier des API avec des adresses privées accessibles à partir de votre réseau. Si vous voulez qu'elles acceptent le trafic Internet, vous pouvez les exposer avec des adresses IP publiques. Les adresses prennent en charge la validation d'API, la transformation des demandes et des réponses, CORS, l'authentification et l'autorisation, ainsi que la limitation des demandes.

A l'aide du service OCI API Gateway, vous pouvez créer des passerelles d'API dans un sous-réseau régional pour traiter le trafic à partir de clients d'API et l'acheminer vers des services back-end. Vous pouvez utiliser une seule passerelle d'API pour lier plusieurs services back-end (tels qu'OCI Load Balancer, les instances OCI Compute et OCI Functions) en une seule adresse d'API consolidée.

Fonctions OCI

OCI Functions est une plate-forme Functions-as-a-Service entièrement gérée, colocative, hautement évolutive et à la demande. Elle est basée sur OCI de niveau entreprise et sur le moteur open source du projet Fn. Utilisez OCI Functions lorsque vous voulez vous concentrer sur l'écriture de code pour répondre aux besoins de votre entreprise.

Remarque :

Objectif

Prérequis

Tâche 1 : configurer des groupes dynamiques

Connectez-vous à la console OCI, accédez au domaine, cliquez sur Groupes dynamiques et créez des groupes avec les informations suivantes.

Tâche 2 : créer des stratégies

Accédez à la console OCI, accédez à Stratégies et créez des stratégies avec les informations suivantes.

Tâche 3 : création d'un registre de conteneurs OCI

  1. Accédez à la console OCI, accédez à Services de développeur, à Conteneurs et artefacts, sélectionnez Registre de conteneurs et cliquez sur Créer un référentiel afin de créer un référentiel privé pour l'image de fonction.

    • Nom du référentiel : entrez functions/authorizationfunctionjava.

      création de référentiel

  2. Vérifiez les référentiels et notez l'espace de noms.

    espace de noms du référentiel

  3. Ouvrez OCI Cloud Shell où l'interface de ligne de commande OCI et Docker doivent être installés, puis passez à la connexion dans le registre. Vérifiez l'URL correcte pour votre région. Dans ce tutoriel, nous utilisons Est du Brésil (Sao Paulo), où l'URL du registre est gru.ocir.io.

    docker login -u 'yourRepositoryNamespace/oracleidentitycloudservice/yourUserLogin' gru.ocir.io
    Password: YOUR_AUTH_TOKEN_CREATED_EARLIER
    

    docker login

Tâche 4 : création de fonctions OCI Java en tant que fonction d'autorisation

Remarque : veillez à sélectionner votre sous-réseau privé.

  1. Accédez à la console OCI, accédez à Services de développeur, à Fonctions, à Applications et cliquez sur Créer une application.

    créer une application

  2. Lancez OCI Cloud Shell dans lequel Docker, l'interface de ligne de commande OCI et l'interface de ligne de commande du projet Fn sont installés, puis exécutez les commandes suivantes pour initialiser la fonction.

    Remarque : si vous avez suivi les tâches, la commande de connexion Docker aurait déjà été exécutée. Sinon, passez à l'étape de connexion Docker dans la tâche 3.

    Accédez à la console OCI, sélectionnez les services de développeur, les fonctions, les applications, sélectionnez l'application et cliquez sur Pour commencer. Exécutez les commandes suivantes .

    fn list context
    fn use context sa-saopaulo-1
    fn update context oracle.compartment-id PASTE_YOUR_COMPARTMENT_OCID
    fn update context registry gru.ocir.io/PASTE_YOUR_REGISTRY_NAMESPACE/functions
    

    Remarque : dans ce tutoriel, nous utilisons la région Est du Brésil (Sao Paulo). Si vous utilisez une autre région, vous devez modifier l'emplacement du registre.

  3. Téléchargez l'exemple de code de fonction Java à partir de cet emplacement : authorizationfunctionjava.tar, téléchargez-le vers OCI Cloud Shell, puis décompressez le fichier.

    # check your file is there
    ls -lrt
    # create your directory
    mkdir authorizationfunctionjava
    # unzip the file
    tar -xvf authorizationfunctionjava.tar -C authorizationfunctionjava
    cd authorizationfunctionjava/
    

    décompresser le fichier tar

    Ce code Java simple reçoit deux paramètres : token et customer. Il extrait également un troisième paramètre à partir d'une variable d'environnement système définie dans la configuration de la fonction.

    Remarque : assurez-vous que les noms de paramètre dans la méthode handleRequest(entrée d'entrée) sont identiques aux noms utilisés dans la configuration de passerelle d'API. Cela garantit que la passerelle d'API transmet correctement les paramètres à la fonction d'autorisation.

    code java

    Ce fragment de code valide l'entrée et renvoie une réponse spécifique.

    validation

    résultat

    Pour plus d'informations sur le format de réponse et les paramètres requis, reportez-vous à Création d'une fonction d'autorisation.

  4. Exécutez la commande suivante pour créer le code et déployer la fonction.

    cd authorizationfunctionjava/
    ls -lart
    fn deploy --app chafikFunctions
    

    créer

    créer

  5. Créez plusieurs configurations pour stocker vos informations d'identification client afin de tester la validation de la fonction.

    Remarque : ces variables de configuration sont utilisées en tant que variables d'environnement système dans l'exemple de code Java fourni dans ce tutoriel. Toutefois, vous pouvez modifier le code de la fonction pour utiliser une autre approche, telle que Fn RuntimeContext. Pour plus d'informations, reportez-vous à Utilisation de Fn RuntimeContext avec Functions.

    Nom/clé de clé secrète Value
    FN_AAA_KEY 123 456
    FN_BBB_KEY 898 989
    FN_ORACLE_KEY ABCD1234
  6. Vous pouvez configurer ces paramètres via la console OCI en accédant à Services de développeur. Sous Fonctions, cliquez sur Applications, sélectionnez votre application, puis votre fonction. Sur la page de détails de la fonction, cliquez sur Configuration.

    configuration

    Ou

    Exécutez les commandes fn.

    fn config function --help
    
    MANAGEMENT COMMAND
    fn config function - Store a configuration key for this function
    
    USAGE
    fn [global options] config function <app-name> <function-name> <key> <value>
    
    DESCRIPTION
    This command sets the configuration of a specific function for an application.
    
    fn config function chafikFunctions authorizationfunctionjava FN_ORACLE_KEY ABCD1234
    
  7. Exécutez la commande suivante pour appeler la fonction.

    # Invoke the function to check if it's working as expected
    echo -n '{"data" : {"customer":"ORACLE", "token": "ABCD1234"}}' | fn invoke chafikFunctions authorizationfunctionjava
    

    Remarque : l'appel initial peut prendre jusqu'à une minute pour réchauffer la fonction. Vérifiez la configuration pour tous les paramètres supplémentaires. Pour plus d'informations, reportez-vous à Réduction de la latence initiale à l'aide de l'accès simultané provisionné.

    Testez avec des données valides et non valides pour vérifier les réponses de la fonction.

    appeler une fonction

Tâche 5 : création d'une passerelle d'API OCI et d'une API de simulation pour utiliser la fonction d'autorisation

Remarque : veillez à sélectionner votre sous-réseau public.

  1. Accédez à la console OCI, accédez aux services de développeur, à la gestion des API, aux passerelles et cliquez sur Créer une passerelle.

    créer une application

  2. Accédez à la page Détails de la passerelle et notez le nom d'hôte.

    nom d'hôte de passerelle

  3. Créez un déploiement dans API Gateway. Dans Informations de base, entrez les informations suivantes.

    • Préfixe de chemin : entrez /authFunction.

    Remarque : le nom d'hôte et le préfixe de chemin de la passerelle d'API seront utilisés pour former l'adresse d'API.

    Informations de base

  4. Dans Authentification, entrez les informations suivantes.

    • Sélectionnez Authentification unique.

    • Sélectionnez Fonction d'autorisation.

    • Application Oracle Functions : sélectionnez l'application créée dans la tâche 4.

    • Fonction Oracle : sélectionnez la fonction créée dans la tâche 4.

    • Sélectionnez Fonction d'autorisation à arguments multiples.

    • Arguments de fonction : entrez les informations suivantes.

      Table de contexte Nom d'en-tête Nom d'argument
      request.headers client client
      request.headers token token

    Remarque : le nom d'en-tête fait référence aux informations incluses dans l'en-tête de demande lors de l'appel de l'adresse d'API. Le nom de l'argument est le nom du paramètre envoyé à la fonction d'autorisation. Reportez-vous au code Java dans la tâche 4.3.

    authentification unique

    arguments de fonction

  5. Dans Routes, créez une route unique pour un test de simulation avec les informations suivantes.

    • Chemin : entrez /mock.
    • Méthodes : sélectionnez GET.
    • Option de back-end : sélectionnez Modifier le back-end unique ajouté.
    • Type de back-end : sélectionnez Réponse au stock.

    itinéraire

  6. Dans Routages, définissez la réponse simulée et cliquez sur Suivant.

    • Code de statut : entrez 200.
    • Corps : entrez {"mensagem" : "ok"}.
    • Nom d'en-tête : sélectionnez Type de contenu.
    • Valeur d'en-tête : sélectionnez application/json ; charset=UTF-8.

    simuler

  7. Dans Vérifier, vérifiez la configuration et cliquez sur Enregistrer les modifications pour terminer la création du déploiement.

  8. Exécutez la commande curl pour tester votre API.

    # Invoke using <Verb Defined in Route> with the endpoint like: <API Gateway Hostname> + <Deployment Path Prefix> + <Route Path>
    # Send parameters, such as customer and token, in the Header with values configured in Task 4 - Step 5
    curl -i -H "customer: AAA" -H "token: 123456" -X GET https://yourapigatewayhosta.your-region.oci.customer-oci.com/authFunction/mock
    

    appeler une fonction

    En cas d'appel avec des informations non valides, la réponse sera HTTP/1.1 401 Unauthorized.

    401 statut

Tâche 6 : utiliser OCI API Gateway pour extraire les paramètres et la portée des fonctions d'autorisation

Remarque Reportez-vous au code Java téléchargé dans la tâche 4. Cette tâche explique comment utiliser result.context et result.scope dans la passerelle d'API.

  1. Extraire des valeurs de contexte à partir des fonctions d'autorisation.

    variable contextuelle

    Prenons un scénario dans lequel vous devez extraire des informations de la fonction d'autorisation et les utiliser dans la passerelle d'API. Par exemple, vous pouvez utiliser un jeton d'autorisation pour appeler un service back-end.

    Remarque : dans cette démonstration en laboratoire, les informations sont renvoyées dans l'en-tête de réponse.

  2. Accédez à la console OCI, accédez aux services de développeur, à la gestion des API, aux passerelles et sélectionnez votre passerelle. Cliquez sur Déploiements, sélectionnez le déploiement créé dans la tâche 5, puis cliquez sur Modifier.

    modifier un déploiement

  3. Accédez à Routages et cliquez sur Afficher les stratégies de réponse de routage.

    réponse de routage

  4. Dans Stratégies de réponse, sous Transformations d'en-tête, cliquez sur Ajouter pour continuer.

    bouton Ajouter

  5. Sur la page Transformations d'en-tête de réponse, configurez la passerelle d'API comme indiqué dans l'image suivante et cliquez sur Appliquer les modifications.

    Les deux paramètres du code Java seront inclus dans les en-têtes de réponse d'API.

    • Nom d'en-tête : ce champ indique le nom de l'attribut d'en-tête dans la réponse d'API.
    • Valeurs : ce champ indique le nom de l'attribut extrait de la fonction d'autorisation.

    Utilisez le format suivant :

    ${request.auth[attributeNameFromAuthorizerFunction]}
    
    #examples
    ${request.auth[valor01]}
    ${request.auth[valor02]}
    

    paramétrage des en-têtes

  6. Vérifiez la configuration des réponses d'en-tête. Cliquez sur Suivant pour vérifier les modifications et cliquez sur Enregistrer les modifications pour les appliquer.

    Vérifier la configuration de l'en-tête

  7. Testez l'API et examinez les en-têtes de réponse.

    réponse d'en-tête

  8. Précisons comment utiliser les valeurs de portée d'une fonction d'autorisation pour améliorer la sécurité.

    Remarque : dans le contexte de l'autorisation, portée fait référence aux autorisations ou aux niveaux d'accès spécifiques accordés à un utilisateur ou à une application.

    variable contextuelle

    La fonction d'autorisation renvoie toutes les portées disponibles (dans notre exemple, elles sont codées en dur) pour cet appel d'API.

    Pour certaines routages dans le déploiement d'API Gateway, vous pouvez autoriser uniquement des portées spécifiques afin d'améliorer la sécurité.

    Accédez à la console OCI, accédez aux services de développeur, à la gestion des API, aux passerelles et sélectionnez votre passerelle. Cliquez sur Déploiements, sélectionnez le déploiement créé dans la tâche 5, puis cliquez sur Modifier.

    modifier un déploiement

  9. Accédez à Routages et cliquez sur Afficher les stratégies de demande de routage.

    demande d'acheminement

  10. Dans Stratégies de demande, sous Autorisation, cliquez sur Modifier.

    modifier un bouton

  11. Dans Stratégie d'autorisation, sélectionnez Tout comme type d'autorisation, ajoutez toutes les portée autorisée renvoyées par la fonction d'autorisation, puis cliquez sur Appliquer les modifications.

    stratégie d'autorisation

  12. Dans Vérifier, vérifiez vos modifications, cliquez sur Suivant, puis sur Enregistrer les modifications pour appliquer vos modifications.

    stratégie d'autorisation

  13. Testez l'API et vérifiez qu'elle fonctionne. Les portées sont renvoyées par la fonction d'autorisation.

    test réussi

  14. Modifiez la passerelle d'API pour utiliser une portée non renvoyée par la fonction d'autorisation.

    Vérifiez vos modifications, cliquez sur Suivant, puis sur Enregistrer les modifications pour appliquer vos modifications.

    échec de la portée

  15. Testez l'API et vérifiez le résultat.

    stratégie d'autorisation

    La réponse sera un statut HTTP 404 Introuvable.

    Vérifiez que les fonctions d'autorisation fonctionnent correctement, car les deux en-têtes sont renvoyés. Cependant, le back-end de routage échoue en raison de la validation de l'autorisation de portée dans les stratégies de demande.

Remerciements

Ressources de formation supplémentaires

Explorez d'autres ateliers sur docs.oracle.com/learn ou accédez à d'autres contenus de formation gratuits sur le canal Oracle Learning YouTube. De plus, visitez le site education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.

Pour obtenir la documentation produit, consultez le site Oracle Help Center.