Remarques :
- Ce tutoriel nécessite un accès à Oracle Cloud. Pour vous inscrire à un compte gratuit, reportez-vous à Introduction au niveau gratuit d'Oracle Cloud Infrastructure.
- Il utilise des exemples de valeurs pour les informations d'identification, la location et les compartiments Oracle Cloud Infrastructure. Lorsque vous terminez votre atelier, remplacez ces valeurs par celles propres à votre environnement cloud.
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 :
-
Application sur un réseau sur site connecté à Oracle Cloud via Fast-Connect/VPN.
-
L'application doit utiliser un service OCI Streaming.
-
Le service OCI ne dispose pas d'un mécanisme d'authentification qui répond aux possibilités du consommateur d'applications.
-
L'application doit s'authentifier à l'aide de OAuth2 pour pouvoir accéder au service en toute sécurité.
Par conséquent, le tutoriel fournit la solution suivante :
-
Configurez le propre fournisseur d'identités du cloud Oracle Identity Cloud Service pour l'authentification via OAuth2.
-
Configurez OCI API Gateway pour l'intégration à Oracle Identity Cloud Service afin de l'authentifier via un jeton obtenu.
-
Codez une fonction pour produire l'authentification pour OCI Streaming (méthode
draft-cavage-http-signatures-08
). -
Créez des groupes et des stratégies pour limiter l'accès aux ressources cloud.
-
Fournissez un fournisseur d'identités qui vous permet de transmettre l'ID client et l'ID de clé secrète et d'obtenir un jeton d'authentification.
-
Fournissez un service REST API Gateway fonctionnel qui s'authentifie via le jeton obtenu et permet au consommateur d'utiliser les services OCI Streaming.
Remarque : le code OCI Functions peut être téléchargé ici : OAuthOCIService-fn.zip.
Objectifs
-
Autorisez une application externe à utiliser les services REST OCI avec l'authentification OAuth2.
-
Fournissez un service d'authentification OAuth2 sur OCI.
-
Configurez OCI API Gateway et OCI Functions pour exécuter les services OCI via un jeton.
Prérequis
-
Instance OCI API Gateway créée et exposée à Internet. Pour plus d'informations, reportez-vous à Création de votre première passerelle d'API dans Oracle Cloud.
-
Connectivité réseau entre OCI API Gateway, OCI Functions et la ressource OCI PaaS.
-
VCN/Sous-réseaux
-
Liste de sécurité
-
Passerelle NAT/Passerelle Internet
-
Réseaux publics/privés
-
-
Connaissance d'OCI Functions et de l'API REST OCI pour coder un appel pour le service OCI.
Tâche 1 : configurer OAuth2 avec Oracle Identity Cloud Service
-
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.
-
-
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.
-
Dans la console OCI, accédez à Identité et sécurité et sélectionnez Fédération.
-
Cliquez sur OracleIdentityCloudSevice.
-
Cliquez sur le lien Console Oracle Identity Cloud Service de votre instance Oracle Identity Cloud Service.
-
Nous allons créer deux applications. Cliquez sur Applications et services.
-
Dans les applications, cliquez sur Ajouter.
-
Sélectionnez Application confidentielle pour commencer à configurer le serveur de ressources.
-
Nous allons configurer la première application. Entrez un nom dans l'application de serveur de ressources, puis cliquez sur Suivant.
-
Cliquez sur Ignorer pour plus tard. Nous devons configurer la ressource uniquement.
-
Entrez le nom d'hôte API Gateway obtenu à l'étape 1.
-
Cliquez sur Ajouter une portée et entrez les informations de portée.
-
Vérifiez les informations de portée, cliquez deux fois sur Suivant et cliquez sur Terminer.
-
Cliquez sur Activer pour activer l'application.
-
-
Création d'une application client.
-
Dans Applications, cliquez sur Ajouter.
-
Sélectionnez Application confidentielle pour commencer à configurer le serveur de ressources.
-
Entrez le nom de l'application, puis cliquez sur Suivant.
-
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.
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
. -
Cliquez sur Ajouter une portée.
-
Recherchez l'application de ressource créée précédemment (
oauth_resource_server
), puis cliquez sur Ajouter. -
Vous pouvez voir votre portée ajoutée à votre application. Fournissez les informations relatives au jeu de transport, puis cliquez sur Suivant.
Remarque : notez la valeur de portée. Vous devrez l'utiliser pour demander un jeton.
-
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.
-
Notez les informations relatives à l'ID client et à la clé secrète client. Vous en aurez besoin pour obtenir votre jeton.
-
Cliquez sur Activer pour activer l'application et l'autorisation OAuth2 est prête à être testée.
-
-
Obtenir un jeton : nous pouvons maintenant tester l'autorisateur OAuth2 pour obtenir le jeton.
-
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
. -
Vous aurez besoin du lien URL jusqu'à
oraclecloud.com
, qui est l'adresse racine. Par exemple,https://idcs-xxxxxxxxxxxxx.identity.oraclecloud.com
. -
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. -
Entrez les informations d'identification en tant qu'authentification de base, ID client et clé secrète client.
-
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.
-
Cliquez sur Envoyer, exécutez la demande
POST
et affichez le jeton.
-
Tâche 2 : configurer OCI Functions pour appeler votre API de kit SDK OCI
-
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.
-
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.
-
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.
-
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.
-
Le chiffrement de signature sera utilisé sur le HEADER complet d'autorisation.
-
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. -
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
etoci_region
). -
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.
-
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.
-
Il s'agit de l'étape finale et revient avec une authentification valide.
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
.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 cryptographiquedraft-cavage-http-signatures-08
.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.
-
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
-
Dans Authentification, sélectionnez Authentification unique et Fonction d'autorisation. Sélectionnez le compartiment et la fonction Oracle en tant que
get-authorization
. -
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
-
Pour configurer les paramètres HEADER pour Oracle Identity Cloud Service, vous devez cliquer sur Afficher les stratégies de demande de routage.
-
Dans les transformations HEADER, cliquez sur Modifier et entrez Comportement sur
Overwrite
dans les deux paramètres, Nom d'en-tête en tant queAuthorization
,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.
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.
-
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
-
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.
Et voici le résultat.
Dans les journaux, vous pouvez voir les charges utiles pour votre logique d'autorisation de code personnalisée.
Liens connexes
-
Création de votre première passerelle d'API dans Oracle Cloud
-
Revue de processus d'appel REST Oracle Cloud Infrastructure avec boucle
Remerciements
- Auteur - Cristiano Hoshikawa (Ingénieur solutions Oracle LAD A-Team)
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.
Integrate OCI Streaming with Other Authorization Methods Using OCI API Gateway
F91390-02
November 2024