Note :
- Ce tutoriel nécessite l'accès à Oracle Cloud. Pour vous inscrire à un compte gratuit, voir Introduction à l' niveau gratuit d'Oracle Cloud Infrastructure.
- Il utilise des exemples de valeurs pour les données d'identification, la location et les compartiments Oracle Cloud Infrastructure. À la fin de votre laboratoire, remplacez ces valeurs par celles propres à votre environnement en nuage.
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 :
-
Application sur un réseau sur place connecté à Oracle Cloud au moyen de Fast-Connect/VPN.
-
L'application doit consommer un service de diffusion en continu pour OCI.
-
Le service OCI ne dispose pas d'un mécanisme d'authentification qui répond aux possibilités du consommateur d'application.
-
L'application doit s'authentifier à l'aide de OAuth2 pour pouvoir accéder au service en toute sécurité.
Par conséquent, le didacticiel fournit la solution suivante :
-
Configurez le fournisseur d'identités du service Oracle Identity Cloud Service Cloud pour l'authentification au moyen de OAuth2.
-
Configurez la passerelle d'API OCI pour l'intégration à Oracle Identity Cloud Service pour l'authentification au moyen d'un jeton obtenu.
-
Codez une fonction pour produire l'authentification pour le service de diffusion en continu pour OCI (méthode
draft-cavage-http-signatures-08
). -
Créez des groupes et des politiques pour limiter l'accès aux ressources en nuage.
-
Fournissez un fournisseur d'identités qui vous permet de transmettre l'ID client et l'ID clé secrète et d'obtenir un jeton d'authentification.
-
Fournir un service REST fonctionnel de passerelle d'API qui s'authentifie au moyen du jeton obtenu et permet au consommateur d'utiliser les services de diffusion en continu pour OCI.
Note : Le code du service des fonctions pour OCI peut être téléchargé ici : OAuthOCIService-fn.zip.
Objectifs
-
Autoriser une application externe à consommer des services REST OCI avec l'authentification OAuth2.
-
Fournissez un service d'authentification OAuth2 sur OCI.
-
Configurez la passerelle d'API OCI et le service des fonctions pour OCI pour exécuter des services OCI au moyen d'un jeton.
Préalables
-
Une instance de passerelle d'API OCI créée et exposée à Internet. Pour plus d'informations, voir Création de votre première passerelle d'API dans Oracle Cloud.
-
Connectivité réseau entre la passerelle d'API OCI, le service des fonctions pour OCI et la ressource PaaS pour OCI.
-
VCN/sous-réseaux
-
Liste de sécurité
-
Passerelle NAT/Passerelle Internet
-
Réseaux publics/privés
-
-
Connaissance du service des fonctions pour OCI et de l'API REST pour OCI afin de coder un appel pour le service OCI.
Tâche 1 : Configurer OAuth2 avec Oracle Identity Cloud Service
-
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.
-
-
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.
-
Dans la console OCI, allez à 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 votre serveur de ressources.
-
Nous allons configurer la première application. Entrez un nom dans votre application de serveur de ressources et cliquez sur Suivant.
-
Cliquez sur Ignorer pour plus tard. Nous devons configurer la ressource uniquement.
-
Entrez le nom d'hôte de la passerelle d'API obtenu à l'étape 1.
-
Cliquez sur Ajouter une étendue et entrez les informations sur la portée.
-
Vérifiez les informations sur la portée, cliquez deux fois sur Suivant et cliquez sur Terminer.
-
Cliquez sur Activer pour activer votre application.
-
-
Créer une application client.
-
Dans Applications, cliquez sur Ajouter.
-
Sélectionnez Application confidentielle pour commencer à configurer votre serveur de ressources.
-
Entrez un nom pour votre application et cliquez sur Suivant.
-
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.
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
. -
Faites défiler vers le bas et cliquez sur Ajouter une étendue.
-
Recherchez l'application de ressources créée avant (
oauth_resource_server
) et cliquez sur Ajouter. -
Vous pouvez voir la portée ajoutée à votre application. Cliquez sur Suivant.
Note : Notez la valeur de portée. Vous devrez l'utiliser pour demander un jeton.
-
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.
-
Notez l'ID client et les informations sur la clé secrète client. Vous en aurez besoin pour obtenir votre jeton.
-
Cliquez sur Activer pour activer l'application et votre approbateur OAuth2 est prêt à être testé.
-
-
Obtenir un jeton : Nous pouvons maintenant tester l'autorisation OAuth2 pour obtenir le jeton.
-
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
. -
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
. -
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 données d'identification comme 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é saisie dans la configuration d'Oracle Identity Cloud Service.
-
Cliquez sur Envoyer, exécutez la demande
POST
et consultez le jeton.
-
Tâche 2 : Configurer le service des fonctions pour OCI pour appeler l'API de la trousse SDK pour OCI
-
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.
-
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.
-
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.
-
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.
-
Le chiffrement de la signature sera utilisé dans l'en-tête d'autorisation complet.
-
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. -
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
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 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.
-
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.
-
Il s'agit de l'étape finale et retourne 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 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 cryptographiquedraft-cavage-http-signatures-08
.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.
-
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
-
Dans l'authentification, sélectionnez Authentification unique et Fonction d'autorisation. Sélectionnez le compartiment et la fonction Oracle comme
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 politiques de demande de routage.
-
Dans les transformations HEADER, cliquez sur Modifier et entrez Comportement à
Overwrite
dans les deux paramètres, Nom d'en-tête commeAuthorization
,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.
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.
-
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 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.
Et voici le résultat.
Dans les journaux, vous pouvez voir les données utiles pour votre logique d'autorisation de code personnalisée.
Liens connexes
-
Création de votre première passerelle d'API dans Oracle Cloud
-
Service des fonctions pour OCI : Appeler une fonction à l'aide de la passerelle d'API
-
Procédure pas à pas d'appel REST pour Oracle Cloud Infrastructure avec curl
Confirmation
- Auteur - Cristiano Hoshikawa (ingénieur de la solution d'équipe A d'Oracle LAD)
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.
Integrate OCI Streaming with Other Authorization Methods Using OCI API Gateway
G18165-01
November 2024