Note :

Personnaliser la sécurité de votre API à l'aide de la passerelle d'API OCI et du service des fonctions pour OCI

Présentation

Découvrez la synergie transparente entre les fonctions Oracle Cloud Infrastructure (OCI) et la passerelle d'API OCI pour mettre en oeuvre une méthode d'authentification personnalisée pour vos API et la façon dont les fonctions peuvent extraire des arguments de la passerelle d'API.

Service de passerelle d'API pour OCI

Le service de passerelle d'API OCI vous permet de publier des API avec des points d'extrémité privés qui sont accessibles depuis votre réseau, mais que vous pouvez exposer avec des adresses IP publiques si vous souhaitez qu'elles acceptent le trafic Internet. Les points d'extrémité prennent en charge la validation, la transformation des demandes et des réponses, la spécification CORS, l'authentification et l'autorisation, ainsi que la limitation des demandes pour les API.

À l'aide du service de passerelle d'API OCI, vous créez une ou plusieurs passerelles d'API dans un sous-réseau régional pour traiter le trafic en provenance des clients d'API et l'acheminer vers les services dorsaux. Vous pouvez utiliser une seule passerelle d'API pour lier plusieurs services dorsaux (tels que l'équilibreur de charge OCI, les instances de calcul OCI et le service des fonctions pour OCI) en un seul point d'extrémité d'API consolidé.

Fonctions OCI

Le service des fonctions pour OCI est une plate-forme de fonctions-service sur demande, entièrement gérée, multilocataire, très évolutive. Elle repose sur OCI de niveau entreprise et utilise le moteur à source ouverte Fn Project. Utilisez le service des fonctions pour OCI lorsque vous voulez vous concentrer sur l'écriture de code pour répondre à des besoins d'affaires.

Note :

Objectif

Préalables

Tâche 1 : Configurer des groupes dynamiques

Connectez-vous à la console OCI, naviguez jusqu'à votre domaine, cliquez sur Groupes dynamiques et créez des groupes avec les informations suivantes.

Tâche 2 : Créer des politiques

Allez à la console OCI, naviguez jusqu'à Politiques et créez des politiques avec les informations suivantes.

Tâche 3 : Créer un registre de conteneurs OCI

  1. Allez à la console OCI, naviguez jusqu'à Services de développement, Conteneurs et artefacts, sélectionnez Registre de conteneurs et cliquez sur Créer un référentiel pour créer un référentiel privé pour l'image de la 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 l'OCI Cloud Shell où l'interface de ligne de commande OCI et Docker doivent être installés, puis connectez-vous au registre. Vérifiez quelle est l'URL correcte pour votre région. Dans ce tutoriel, nous utiliserons Brésil - Est (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
    

    connexion à docker

Tâche 4 : Créer un service des fonctions pour OCI Java en tant que fonction d'autorisation

Note : Assurez-vous de sélectionner votre sous-réseau privé.

  1. Allez à la console OCI, naviguez jusqu'à Services de développement, Fonctions, Applications et cliquez sur Créer une application.

    créer l'application

  2. Lancez OCI Cloud Shell où Docker, l'interface de ligne de commande OCI et l'interface de ligne de commande Fn Project sont installés et exécutez les commandes suivantes pour initialiser la fonction.

    Note : Si vous avez suivi les tâches, votre commande de connexion Docker aurait déjà dû être exécutée, sinon, passez à l'étape de connexion Docker de la tâche 3.

    Allez à la console OCI, naviguez jusqu'à Services de développement, Fonctions, Applications, sélectionnez votre application et cliquez sur Démarrage. 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
    

    Note : Dans ce tutoriel, nous utilisons la région Brésil - Est (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 d'ici : authorizationfunctionjava.tar et chargez-le dans votre Cloud Shell pour OCI, 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 d'une variable d'environnement système définie dans la configuration de la fonction.

    Note : 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 la passerelle d'API. Cela garantit que la passerelle d'API transmet correctement les paramètres à la fonction d'autorisation.

    code java

    Cet extrait de code valide l'entrée et retourne une réponse spécifique.

    validation

    résultat

    Pour plus d'informations sur le format de réponse et les paramètres requis, voir Création d'une fonction d'approbateur.

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

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

    build

    build

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

    Note : Ces variables de configuration sont utilisées comme variables d'environnement système dans l'exemple de code Java fourni dans ce tutoriel. Toutefois, vous pouvez modifier le code de fonction pour utiliser une autre approche, telle que Fn RuntimeContext. Pour plus d'informations, voir Utilisation de Fn RuntimeContext avec des fonctions.

    Nom/clé secrète Valeur
    FN_AAA_KEY 123,456
    FN_BBB_KEY 898,989
    FN_ORACLE_KEY ABCD1234
  6. Vous pouvez configurer ces paramètres au moyen de la console OCI en naviguant jusqu'aux services de développement. Sous Fonctions, cliquez sur Applications, sélectionnez votre application, puis sélectionnez votre fonction. Dans la page des 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
    

    Note : L'appel initial peut prendre jusqu'à une minute pour réchauffer la fonction. Vérifiez la configuration pour les paramètres supplémentaires. Pour plus d'informations, voir Réduction de la latence initiale à l'aide de la concurrence provisionnée.

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

    appeler une fonction

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

Note : Veillez à sélectionner votre sous-réseau public.

  1. Allez à la console OCI, naviguez jusqu'à Services de développement, Gestion d'API, Passerelles et cliquez sur Créer une passerelle.

    créer l'application

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

    nom d'hôte de la passerelle

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

    • Préfixe de chemin : Entrez /authFunction.

    Note : Le nom d'hôte et le préfixe de chemin de la passerelle d'API seront utilisés pour former le point d'extrémité de l'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 une fonction créée dans la tâche 4.

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

    • Arguments de fonction : Entrez les informations suivantes.

      Table de contexte Nom de l'en-tête Nom de l'argument
      request.headers client client
      request.headers jeton jeton

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

    authentification unique

    arguments de fonction

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

    • Chemin : Entrez /mock.
    • Méthodes : Sélectionnez GET.
    • Option dorsale : Sélectionnez Modifier le serveur dorsal unique ajouté.
    • Type dorsal : Sélectionnez Réponse de stock.

    itinéraire

  6. Dans Routes, 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 Content-Type.
    • Valeur d'en-tête : Sélectionnez application/json; charset=UTF-8.

    simulation

  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 Non autorisé.

    Statut 401

Tâche 6 : Utiliser la passerelle d'API OCI pour extraire les paramètres et l'étendue des fonctions d'approbateur

Note Consultez le code Java téléchargé à la tâche 4. Cette tâche explique comment utiliser result.context et result.scope dans la passerelle d'API.

  1. Extraire les valeurs de contexte des fonctions d'autorisation.

    variable de contexte

    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 dorsal.

    Note : Dans cette démonstration en laboratoire, les informations sont retournées dans l'en-tête de la réponse.

  2. Allez à la console OCI, naviguez jusqu'à Services de développement, Gestion d'API, 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 le déploiement

  3. Naviguez jusqu'à Routes et cliquez sur Afficher les politiques de réponse de route.

    réponse de routage

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

    ajouter un bouton

  5. Dans la page Transformations d'en-tête de réponse, configurez votre passerelle d'API comme illustré 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 spécifie le nom de l'attribut d'en-tête dans la réponse d'API.
    • Valeurs : Ce champ spécifie 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]}
    

    définition de l'en-tête

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

    définition de l'en-tête de vérification

  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é.

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

    variable de contexte

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

    Pour certaines routes du déploiement du service de passerelle d'API, vous pouvez autoriser uniquement des étendues spécifiques pour améliorer la sécurité.

    Allez à la console OCI, naviguez jusqu'à Services de développement, Gestion d'API, 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 le déploiement

  9. Naviguez jusqu'à Routes et cliquez sur Afficher les politiques de demande de route.

    demande d'itinéraire

  10. Dans Politiques de demande, sous Autorisation, cliquez sur Modifier.

    bouton de modification

  11. Dans la politique d'autorisation, sélectionnez Au choix comme type d'autorisation, ajoutez toute la portée autorisée retournée par la fonction d'autorisation, puis cliquez sur Appliquer les modifications.

    politique d'autorisation

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

    politique d'autorisation

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

    test réussi

  14. Modifiez la passerelle d'API pour qu'elle utilise une étendue non retourné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.

    politique d'autorisation

    La réponse aura le statut HTTP 404 introuvable.

    Vérifiez que les fonctions d'autorisation fonctionnent correctement, car les deux en-têtes sont renvoyés. Toutefois, le serveur dorsal de routage échoue en raison de la validation de l'autorisation de portée dans les politiques de demande.

Confirmation

Autres ressources d'apprentissage

Explorez d'autres laboratoires sur la page docs.oracle.com/learn ou accédez à plus de contenu d'apprentissage gratuit sur le canal YouTube d'Oracle Learning. De plus, visitez education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.

Pour obtenir de la documentation sur le produit, visitez Oracle Help Center.