Note :

Intégrer le service de diffusion en continu pour OCI à d'autres méthodes d'autorisation à l'aide de la passerelle d'API OCI

Présentation

Nous avons souvent besoin de nos applications pour consommer des services REST pour 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 dorsal.

La plupart du temps, cette tâche est native dans Oracle Cloud et 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 existe des cas où l'application peut offrir des exigences de sécurité et de connectivité supplémentaires. Le cas d'utilisation de ce tutoriel répond à un besoin très courant en scénario hybride ou multinuage (sur place connecté à Oracle Cloud, ou Oracle Cloud connecté à un autre nuage).

Présentons le scénario suivant :

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

Note : Le code du service des fonctions pour OCI peut être téléchargé ici : OAuthOCIService-fn.zip.

Objectifs

Préalables

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

  1. Obtenir les paramètres du service de passerelle d'API OCI : Commençons à configurer le mécanisme OAuth2. Nous devons intégrer votre instance de passerelle d'API OCI à un fournisseur d'identités en configurant Oracle Identity Cloud Service à partir d'Oracle Cloud comme fournisseur d'identités.

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

      img.png

  2. Créer une application de ressource : Nous devons créer un approbateur OAuth2 pour votre application. Pour ce faire, utilisez le service Oracle Identity Cloud Service dans Oracle Cloud.

    1. Dans la console OCI, allez à 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 votre serveur de ressources.

      img.png

    7. Nous allons configurer la première application. Entrez un nom dans votre application de serveur de ressources et 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 de la passerelle d'API obtenu à l'étape 1.

      img.png

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

      img.png

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

      img.png

    12. Cliquez sur Activer pour activer votre application.

      img.png

  3. Créer une application client.

    1. Dans Applications, cliquez sur Ajouter.

      img.png

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

      img.png

    3. Entrez un nom pour votre application et 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 Données d'identification du client, Assertion JWT et Au nom de.

      img.png

      Note : Si vous voulez valider OAuth2 dans votre code de fonction, vous devez définir l'indicateur Introspection. Cela activera le service d'API REST d'Oracle Identity Cloud Service pour /oauth2/v1/introspect.

      img_10.png

    5. Faites défiler vers le bas et cliquez sur Ajouter une étendue.

      img.png

    6. Recherchez l'application de ressources créée avant (oauth_resource_server) et cliquez sur Ajouter.

      img.png

    7. Vous pouvez voir la portée ajoutée à votre application. Cliquez sur Suivant.

      img.png

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

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

      img.png

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

      img.png

    10. Cliquez sur Activer pour activer l'application et votre approbateur OAuth2 est prêt à être testé.

      img_1.png

  4. Obtenir un jeton : Nous pouvons maintenant tester l'autorisation OAuth2 pour obtenir le jeton.

    1. Composez l'URL de l'approbateur. Pour ce faire, vous pouvez obtenir l'URL d'Oracle Identity Cloud Service dans le navigateur. Dans l'URL d'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 le point d'extrémité 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 données d'identification comme 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é saisie dans la configuration d'Oracle Identity Cloud Service.

      img.png

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

      img_2.png

Tâche 2 : Configurer le service des fonctions pour OCI pour appeler l'API de la trousse SDK pour OCI

  1. Comprendre le service des fonctions pour OCI et le service de passerelle d'API pour OCI : Il est recommandé d'exposer vos services au moyen d'une passerelle d'API pour OCI. L'authentification peut être effectuée en ignorant les données d'identification de la passerelle d'API OCI vers les services dorsaux, mais si l'authentification dorsale n'était pas la méthode appropriée pour votre application client, nous pouvons effectuer une certaine configuration au niveau de la passerelle d'API OCI.

    Dans cette étape, comprenons comment le service Passerelle d'API OCI peut nous aider à intégrer l'authentification OAuth2 et la demande pour tout service OCI, comme le service de diffusion en continu OCI au moyen du service des fonctions pour OCI.

    Le service Fonctions OCI peut effectuer la tâche pour produire l'authentification/autorisation correcte et la transmettre au service OCI sans avoir à transmettre des données d'identification d'utilisateur ou des clés privées aux applications consommateurs. Certains services du service OCI ne peuvent pas s'authentifier à l'aide de la méthode OAuth2, nous pouvons donc le faire avec le service des fonctions pour OCI. Pour créer et déployer le service Fonctions OCI, voir Démarrage rapide du service des fonctions pour OCI.

    Dans cet exemple, le service de diffusion en continu OCI peut s'authentifier par la clé privée OCI dans le service IAM OCI au moyen de 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 le service de passerelle d'API OCI. Dans votre déploiement d'API, nous configurerons le point d'extrémité du service de diffusion en continu pour OCI dans la passerelle d'API OCI et il sera transmis en tant que paramètre d'autorisation HEADER. Vous pouvez donc utiliser cette fonction pour de nombreux services dans chaque déploiement de passerelle d'API OCI 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. À la date d'en-tête de la demande de service de diffusion en continu pour OCI et à la signature cryptographiée HEADER.

      img_1.png

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

      img_2.png

    • Le chiffrement de la signature sera utilisé dans l'en-tête d'autorisation complet.

      img_3.png

    • Il s'agit du code de validation du jeton Oracle Identity Cloud Service OAUTH2. Vous devez configurer le fichier config.json avec vos 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 des variables de sécurité et de diffusion en continu OCI IAM 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 de passerelle d'API. 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érera une erreur 401 non autorisée.

      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). Le rdata construira la réponse pour la fonction avec les valeurs d'autorisation et de date qui seront utilisées par la passerelle d'API OCI pour l'authentification dans le service de diffusion en continu pour OCI.

      img_15.png

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

      Note : Pour créer un journal personnalisé dans l'observabilité OCI, voir Utiliser la passerelle d'API OCI, les fonctions et l'observabilité pour valider le contenu JSON et surveiller les en-têtes et le corps d'API.

      img_6.png

    • Il s'agit de l'étape finale et retourne 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 votre installation d'interface de ligne de commande OCI, mais il est important de modifier la section key_file et de supprimer le chemin de votre installation d'interface de ligne de commande OCI. Cela sera utilisé 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 valeurs d'OCID du service de diffusion en continu pour OCI et de région OCI comme celle-ci.

    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 la passerelle d'API OCI.

Tâche 3 : Configurer un déploiement de passerelle d'API

Note : Développez une fonction et appelez-la dans la passerelle d'API OCI. Voir Service des fonctions pour OCI : Valider une clé d'API avec la passerelle d'API.

  1. Configurez votre service de passerelle d'API OCI. Dans cet exemple, nous allons configurer un service de diffusion en continu pour OCI. Dans les informations de base, entrez le préfixe de chemin /20180418/streams/ plus l'OCID de votre instance de diffusion en continu.

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

    img.png

  2. Dans l'authentification, sélectionnez Authentification unique et Fonction d'autorisation. Sélectionnez le compartiment et la fonction Oracle comme 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 politiques de demande de routage.

    img.png

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

    img.png

Tâche 4 : Configurer le groupe OCI et les politiques

Pour configurer les politiques pour le service de diffusion en continu pour OCI, voir Politiques du service de diffusion en continu pour OCI et vous pouvez utiliser des politiques communes, voir Politiques communes.

Tâche 5 : Tester l'API

Simulons votre demande OAuth2 d'application pour votre service de déploiement de modèle dans le service de diffusion en continu pour OCI.

  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 au service de passerelle d'API pour OCI. Entrez le point d'extrémité de déploiement de la passerelle d'API et sélectionnez POST pour 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 données utiles pour votre logique d'autorisation de code personnalisée.

    img_8.png

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.