Remarques :

Intégration d'OCI Streaming avec d'autres méthodes d'autorisation à l'aide d'OCI API Gateway

Introduction

Nous avons souvent besoin de nos applications pour utiliser les services REST Oracle Cloud Infrastructure (OCI). Il existe plusieurs façons de garantir la sécurité entre les composants, en veillant à ce que l'application puisse s'authentifier en toute sécurité auprès du service back-end.

La plupart du temps, cette tâche est native dans Oracle Cloud, car il existe plusieurs façons de sécuriser le réseau et d'accéder aux services existants. Juste quelques réglages et vous avez terminé. Cependant, il y a des cas où l'application peut offrir des exigences de sécurité et de connectivité supplémentaires. Le cas d'emploi de ce tutoriel répond à un besoin très courant dans le scénario hybride ou multicloud (sur site connecté à Oracle Cloud ou Oracle Cloud connecté à un autre cloud).

Présentons le scénario suivant :

Par conséquent, le tutoriel fournit la solution suivante :

Remarque : le code OCI Functions peut être téléchargé ici : OAuthOCIService-fn.zip.

Objectifs

Prérequis

Tâche 1 : configurer OAuth2 avec Oracle Identity Cloud Service

  1. Obtention des paramètres OCI API Gateway : commençons à configurer le mécanisme OAuth2. Nous devons intégrer votre instance OCI API Gateway à un fournisseur d'identités en configurant Oracle Identity Cloud Service à partir d'Oracle Cloud en tant que fournisseur d'identités.

    • Accédez à l'instance OCI API Gateway et copiez le nom d'hôte. Ces informations seront utilisées dans la configuration du serveur de ressources Oracle Identity Cloud Service à l'étape suivante.

      img.png

  2. Création d'une application de ressource : nous devons créer un autorisateur OAuth2 pour votre application. Pour ce faire, nous pouvons utiliser Oracle Identity Cloud Service dans Oracle Cloud.

    1. Dans la console OCI, accédez à Identité et sécurité et sélectionnez Fédération.

      img.png

    2. Cliquez sur OracleIdentityCloudSevice.

      img.png

    3. Cliquez sur le lien Console Oracle Identity Cloud Service de votre instance Oracle Identity Cloud Service.

      img.png

    4. Nous allons créer deux applications. Cliquez sur Applications et services.

      img.png

    5. Dans les applications, cliquez sur Ajouter.

      img.png

    6. Sélectionnez Application confidentielle pour commencer à configurer le serveur de ressources.

      img.png

    7. Nous allons configurer la première application. Entrez un nom dans l'application de serveur de ressources, puis cliquez sur Suivant.

      img.png

    8. Cliquez sur Ignorer pour plus tard. Nous devons configurer la ressource uniquement.

      img.png

    9. Entrez le nom d'hôte API Gateway obtenu à l'étape 1.

      img.png

    10. Cliquez sur Ajouter une portée et entrez les informations de portée.

      img.png

    11. Vérifiez les informations de portée, cliquez deux fois sur Suivant et cliquez sur Terminer.

      img.png

    12. Cliquez sur Activer pour activer l'application.

      img.png

  3. Création d'une application client.

    1. Dans Applications, cliquez sur Ajouter.

      img.png

    2. Sélectionnez Application confidentielle pour commencer à configurer le serveur de ressources.

      img.png

    3. Entrez le nom de l'application, puis cliquez sur Suivant.

      img_1.png

    4. Sélectionnez Configurer l'application comme client maintenant pour activer les configurations pour votre application client. Sélectionnez Informations d'identification client, Assertion JWT et Au nom de.

      img.png

      Remarque : si vous voulez valider OAuth2 dans votre code de fonction, vous DEVEZ définir l'indicateur Introspection. Cela active le service d'API REST Oracle Identity Cloud Service /oauth2/v1/introspect.

      img_10.png

    5. Cliquez sur Ajouter une portée.

      img.png

    6. Recherchez l'application de ressource créée précédemment (oauth_resource_server), puis cliquez sur Ajouter.

      img.png

    7. Vous pouvez voir votre portée ajoutée à votre application. Fournissez les informations relatives au jeu de transport, puis cliquez sur Suivant.

      img.png

      Remarque : notez la valeur de portée. Vous devrez l'utiliser pour demander un jeton.

    8. Ignorez les fenêtres Ressources et Stratégie de niveau Web. Dans Autorisation, sélectionnez Imposer les autorisations en tant qu'autorisation et cliquez sur Terminer.

      img.png

    9. Notez les informations relatives à l'ID client et à la clé secrète client. Vous en aurez besoin pour obtenir votre jeton.

      img.png

    10. Cliquez sur Activer pour activer l'application et l'autorisation OAuth2 est prête à être testée.

      img_1.png

  4. Obtenir un jeton : nous pouvons maintenant tester l'autorisateur OAuth2 pour obtenir le jeton.

    1. Composez l'URL de l'autorisateur. Pour ce faire, vous pouvez obtenir l'URL Oracle Identity Cloud Service dans le navigateur. Dans l'URL Oracle Identity Cloud Service, vous pouvez voir quelque chose comme ceci : https://idcs-xxxxxxxxxxxxx.identity.oraclecloud.com/ui/v1/adminconsole.

    2. Vous aurez besoin du lien URL jusqu'à oraclecloud.com, qui est l'adresse racine. Par exemple, https://idcs-xxxxxxxxxxxxx.identity.oraclecloud.com.

    3. Nous devons ajouter le chemin d'authentification oAuth. Cette URL sera exécutée en tant que demande REST POST. Par exemple, https://idcs-xxxxxxxxxxxxx.identity.oraclecloud.com/oauth2/v1/token. Vous devrez entrer certains paramètres pour demander le jeton.

    4. Entrez les informations d'identification en tant qu'authentification de base, ID client et clé secrète client.

      img.png

    5. Dans le contenu Corps, entrez les valeurs grant_type et Portée. N'oubliez pas que la portée a été capturée dans la configuration Oracle Identity Cloud Service.

      img.png

    6. Cliquez sur Envoyer, exécutez la demande POST et affichez le jeton.

      img_2.png

Tâche 2 : configurer OCI Functions pour appeler votre API de kit SDK OCI

  1. Comprendre OCI Functions et OCI API Gateway : il est recommandé d'exposer vos services via une passerelle d'API OCI. L'authentification peut être effectuée en contournant les informations d'identification d'OCI API Gateway vers les services back-end. Toutefois, si l'authentification back-end n'était pas la méthode appropriée pour votre application client, nous pouvons effectuer une configuration au niveau OCI API Gateway.

    Au cours de cette étape, comprenons comment OCI API Gateway peut nous aider à intégrer l'authentification OAuth2 et la demande pour n'importe quel service OCI, comme OCI Streaming via les fonctions OCI.

    OCI Functions peut effectuer le travail pour produire l'authentification/l'autorisation correcte et la transmettre au service OCI sans qu'il soit nécessaire de transmettre des informations d'identification utilisateur ou des clés privées aux applications consommateur. Certains services du service OCI ne peuvent pas s'authentifier à l'aide de la méthode OAuth2. Nous pouvons donc le faire avec OCI Functions. Pour créer et déployer OCI Functions, reportez-vous à Démarrage rapide d'OCI Functions.

    Dans cet exemple, le service OCI Streaming peut s'authentifier par la clé privée OCI dans OCI IAM via la méthode draft-cavage-http-signatures-08 et les consommateurs peuvent s'authentifier par OAuth2.

  2. Comprendre le code : ce code sera utilisé avec OCI API Gateway. Dans votre déploiement d'API, nous allons configurer l'adresse OCI Streaming dans OCI API Gateway et elle sera transmise en tant que paramètre d'autorisation HEADER. Vous pouvez donc utiliser cette fonction pour de nombreux services dans chaque déploiement OCI API Gateway dont vous avez besoin.

    img_12.png

    • Cette fonction en Python créera une date et une heure au format pour l'authentification. Cette date et cette heure doivent être générées une fois et utilisées en deux points. Vers l'en-tête Date de la demande OCI Streaming et l'en-tête cryptographié Signature.

      img_1.png

    • Il s'agit de la fonction de chiffrement de signature. L'assemblage consiste à utiliser la clé privée de l'utilisateur OCI IAM avec SHA-256, puis dans base64.

      img_2.png

    • Le chiffrement de signature sera utilisé sur le HEADER complet d'autorisation.

      img_3.png

    • Code de validation de jeton Oracle Identity Cloud Service OAUTH2. Vous devez configurer le fichier config.json avec les paramètres d'application Oracle Identity Cloud Service.

      img_13.png

    • Il s'agit du début de la fonction et initialise certaines informations à partir de la sécurité OCI IAM et des variables OCI Streaming créées pour ce déploiement d'API (streaming_host et oci_region).

      img_4.png

    • C'est la partie principale de cette fonction, il y a deux parties.

      Dans la première partie, nous obtenons le jeton transmis dans la demande API Gateway. Ensuite, nous appelons la fonction auth_idcs() pour valider le jeton dans Oracle Identity Cloud Service. Avant de générer la chaîne draft-cavage-http-signatures-08, nous validons le jeton Oracle Identity Cloud Service. S'il ne s'agit pas d'un jeton valide, la réponse génère une erreur 401 non autorisé.

      Dans la deuxième partie, nous allons créer deux valeurs. La date (d) avec le format de date sera utilisée dans la création de la signature (a). La rdata construit la réponse pour la fonction avec les valeurs d'autorisation et de date qui seront utilisées par OCI API Gateway pour l'authentification sur OCI Streaming.

      img_15.png

    • Ici, nous pouvons générer un journal dans l'observabilité OCI et cette étape est facultative. Entrez l'OCID (identificateur Oracle Cloud) du journal. Vous devez créer un journal personnalisé précédemment.

      Remarque : pour créer un journal personnalisé dans OCI Observability, reportez-vous à Utilisation d'OCI API Gateway, de Functions et d'Observability pour valider le contenu JSON et surveiller le corps et les en-têtes d'API.

      img_6.png

    • Il s'agit de l'étape finale et revient avec une authentification valide.

      img_7.png

    Il s'agit des bibliothèques requirements.txt qui devront être chargées dans cette fonction (fn).

    requirements.txt
    ---------------------
    fdk>=0.1.54
    requests
    oci
    cryptography
    six
    PyJWT
    py3_lru_cache
    simplejson
    

    Il s'agit du fichier config.json.

    img_14.png

    Il s'agit du fichier de configuration OCI. Vous pouvez copier ce fichier à partir de l'installation de l'interface de ligne de commande OCI, mais il est important de modifier la section key_file et d'enlever le chemin de l'installation de l'interface de ligne de commande OCI. Elle sera utilisée dans le code Python pour générer la chaîne cryptographique draft-cavage-http-signatures-08.

    img_16.png

    Avant de déployer la fonction, créez deux variables et remplissez-les avec les valeurs d'OCID OCI Streaming et de région OCI comme suit.

    fn config app <function-app> streaming_host ocid1.stream.oc1.iad.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxqhgw275qp7a
    fn config app <function-app> oci_region us-ashburn-1
    

    Déployez votre fonction et configurons-la dans OCI API Gateway.

Tâche 3 : configurer un déploiement API Gateway

Remarque : développez une fonction et appelez-la dans OCI API Gateway. Reportez-vous à OCI Functions : validation d'une clé d'API avec API Gateway.

  1. Configurez le service OCI API Gateway. Dans cet exemple, nous allons configurer un service OCI Streaming. Pour obtenir des informations de base, entrez le préfixe de chemin /20180418/streams/ plus l'OCID de l'instance de transmission en continu.

    Par exemple : /20180418/streams/ocid1.stream.oc1.iad.xxxxxxxxxxxxxxxxxxxxxxxxxxxx

    img.png

  2. Dans Authentification, sélectionnez Authentification unique et Fonction d'autorisation. Sélectionnez le compartiment et la fonction Oracle en tant que get-authorization.

    img.png

  3. Configurez les paramètres HEADER de votre demande.

    Header Parameter 1
    Context table=request.headers
    Header name=Date
    Argument name=Date
    
    Header Parameter 2
    Context table=request.headers
    Header name=token
    Argument name=token
    
  4. Pour configurer les paramètres HEADER pour Oracle Identity Cloud Service, vous devez cliquer sur Afficher les stratégies de demande de routage.

    img.png

  5. Dans les transformations HEADER, cliquez sur Modifier et entrez Comportement sur Overwrite dans les deux paramètres, Nom d'en-tête en tant que Authorization, Date et Valeurs en tant que ${request.auth[authorization]} et ${request.auth[date]} respectivement. ${request.auth[authorization]} et ${request.auth[date]} sont les valeurs renvoyées par le code Python de la fonction et seront transmises en tant que HEADER pour le service back-end.

    img.png

Tâche 4 : configuration du groupe et des stratégies OCI

Afin de configurer les stratégies pour OCI Streaming, reportez-vous à Stratégies OCI Streaming et vous pouvez utiliser des stratégies courantes. Reportez-vous à Stratégies courantes.

Tâche 5 : tester l'API

Simulons la demande OAuth2 de votre application pour le service de déploiement de modèle dans OCI Streaming.

  1. Obtenez le jeton et transmettez l'ID client et la clé secrète client à votre fournisseur Oracle Identity Cloud Service.

    Verb: POST
    URL: https://idcs-xxxxxxxxxxxxxxxxxxxxxxx.identity.oraclecloud.com/oauth2/v1/token
    BODY (x-www-form-urlencoded):
    scope: xxxxxxxxxxxxxxxxxxx.apigateway.us-ashburn-1.oci.customer-oci.com/super-scope
    grant_type: client_credentials
    HEADER
    Authorization: clientID:clientSecret\*
    
    - convert your clientID:clientSecret to a base64 value
    

    img_2.png

  2. Testez la demande auprès d'OCI API Gateway. Entrez l'adresse de déploiement de passerelle d'API et sélectionnez POST dans votre demande REST. Vous devez déclarer six TÊTEURS dans le CORPS de votre demande.

    Content-Type: application/json
    access-control-allow-origin: *
    access-control-allow-method: POST,PUT,GET,HEAD,DELETE,OPTIONS
    access-control-allow-credentials: true
    Date: put an actual date in this format -> Thu, 21 Dec 2023 13:53:59 GMT
    token: put your <access_token> here*
    
    * Remember that your token have 1 hour duration.
    

    img_9.png

    Et voici le résultat.

    img_11.png

    Dans les journaux, vous pouvez voir les charges utiles pour votre logique d'autorisation de code personnalisée.

    img_8.png

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.