Configurer les applications dans Oracle Identity Cloud Service

Pour que l'authentification fonctionne correctement, vous devez utiliser la même instance Oracle Identity Cloud Service que celle qui sécurise votre application Oracle Fusion Applications Cloud Service et Oracle PaaS ( Oracle Visual Builder ) ou HTML5 personnalisée. Dans Oracle Identity Cloud Service, vous devez créer une application à utiliser pour l'authentification client.

Dans ce scénario, nous distinguons les événements d'Oracle Functions et d'Oracle API Gateway de l'interaction entre les entités Oracle Functions et Oracle Fusion Applications Cloud Service, en protégeant à la fois à l'aide d'Oracle Identity Cloud Service en tant qu'entités distinctes au lieu d'utiliser la même application Oracle Identity Cloud Service pour les deux.

En règle générale, les applications d'extension Oracle SaaS écrites par les clients Oracle exécutent une logique complexe. Par exemple, un scénario commun consiste à récupérer des données à partir d'Oracle Fusion Applications Cloud Service, à les traiter d'une certaine manière et à renvoyer des données à Oracle Fusion Applications Cloud Service vers une autre cible, comme une base de données.

Par conséquent, nous présentons une architecture avec deux applications Oracle Identity Cloud Service :

  • Application qui protège votre système Oracle Functions en tant que ressource et en tant que client sécurisé d'Oracle Fusion Applications Cloud Service.
  • Application qui protège votre instance Oracle Fusion Applications Cloud Service en tant que ressource.

Les instructions de cet article vous guideront tout au long du processus de création et de configuration de ces applications pour protéger Oracle Functions. Le deuxième de ces deux applications doit déjà exister : vous avez été invité à créer et à configurer une application afin d'activer la fédération entre Oracle Fusion Applications Cloud Service et Oracle PaaS.

Cette configuration vous permet de configurer différentes règles ou stratégies pour accéder à Fonctions par rapport à ces règles ou stratégies pour un client sécurisé afin d'atteindre Oracle Fusion Applications Cloud Service. Dans cette configuration, le jeton d'accès entrant de la passerelle d'API n'exige un accès autorisé à Oracle Functions que pour appeler la fonction, mais il n'a pas nécessairement besoin d'avoir les mêmes autorisations que celles nécessaires pour accéder à l'instance Oracle Fusion Applications Cloud Service. L'application Oracle Visual Builder requiert une application Oracle Identity Cloud Service associée qui générera le jeton d'accès pour atteindre la passerelle d'API. Cette application Oracle Identity Cloud Service sera le client de la ressource de fonctions/passerelle d'API.

Les échanges de jetons présentés dans le diagramme d'architecture fournissent une couche de protection supplémentaire pour propager l'identité si une fonction est un client d'une ressource Oracle Fusion Applications Cloud Service, semblable au processus d'assertion Oracle WebLogic OAuth avec Oracle Identity Cloud Service utilisé dans les anciennes extensions SaaS prises en charge, telles que celles utilisant Oracle Java Cloud Service.

Dans certains cas d'emploi, l'application Oracle Identity Cloud Service utilisée pour générer le jeton pour Oracle Functions peut uniquement avoir des portées de ressource pour les fonctions, mais pas pour Oracle Fusion Applications Cloud Service. Dans ce cas, Oracle Functions ne pourra pas réutiliser le jeton pour appeler Oracle Fusion Applications Cloud Service, mais il est valide pour atteindre Oracle Functions. Vous pouvez ainsi implémenter des flux logiques dans lesquels certains utilisateurs ou certaines modifications de fonction n'ont pas accès, tandis que d'autres le font, selon la logique métier, les rôles utilisateur et les privilèges, ou d'autres critères.

Dans d'autres cas d'utilisation, Oracle Functions peut inclure du code pour demander un jeton d'accès pour Oracle Fusion Applications Cloud Service en utilisant les certificats et l'utilisateur transmis dans la demande de la passerelle d'API.

Création d'une application pour Oracle Functions dans Oracle Identity Cloud Service

Dans Oracle Identity Cloud Service, vous devez créer une application confidentielle à utiliser pour l'authentification du client Oracle Functions.

Dans la même instance Oracle Identity Cloud Service que vous avez fédéré avec votre instance Oracle Fusion Applications Cloud Service, créez une application confidentielle et assurez-vous que la configuration client est configurée de sorte qu'elle active les autorisations d'informations d'identification client, d'assertion JWT et de propriétaire de ressource.

  1. Connectez-vous à Oracle Cloud Mes services, cliquez sur Utilisateurs, puis sur Console d'identité.
  2. Sélectionnez l'onglet Applications et cliquez sur Ajouter. Cliquez ensuite sur Application confidentielle.
  3. Dans la page Détails de l'assistant Ajouter une application confidentielle, donnez un nom à la nouvelle application. Si vous le souhaitez, vous pouvez définir d'autres valeurs telles que la description, l'icône, les paramètres d'affichage et les balises. Cliquez sur Suivant.
  4. Sur la page Client, sélectionnez Configurer cette application comme client maintenant.
    Des options supplémentaires apparaissent sur la page. Définissez-les de cette manière :
    • Types d'octroi autorisés : sélectionnez Propriétaire de ressource, Informations d'identification de client et Assertion JWT.
    • Activez Autoriser les URL non HTTPS.
    • Vous n'avez pas besoin d'URL de réacheminement pour ce cas d'emploi.
    • Type de client : laissez l'option Confidentiel sélectionnée.
  5. Dans la section Ressources, sélectionnez Inscrire des ressources. Définissez la valeur Public principal sur le nom d'hôte de l'instance de passerelle d'API généré dans la console Oracle Cloud Infrastructure lorsque vous avez créé l'instance de l'API Gatway.
    Dans Oracle Cloud Infrastructure, vous pouvez sélectionner votre passerelle, sélectionner l'onglet Informations sur la passerelle, et l'instance Nom d'hôte est affichée dans l'onglet.
  6. Sous Portée, cliquez sur pour ajouter une portée et ajoutez une valeur pour l'URL de base du déploiement qui utilise la stratégie d'autorisation JWT de passerelle d'API. Par exemple, /saasextension.
    Vous utiliserez cette portée pour permettre à l'application d'accéder aux ressources Oracle Functions. Vous pouvez ajouter des portées supplémentaires pour des ressources supplémentaires selon vos besoins.
  7. Vous n'avez pas besoin d'octroyer l'accès aux API d'administration.
  8. Cliquez sur Suivant pour accéder à la page Ressources, puis à nouveau sur Suivant pour accéder à la page Autorisation.
  9. Sur la page Autorisation, cliquez sur Terminer.
    La notification Application ajoutée s'affiche avec votre ID client et votre clé secrète client. Ces informations peuvent être utilisées ultérieurement. Lorsque vous fermez la notification, l'application s'affiche.
  10. Cliquez sur le bouton Activer à droite du nom de l'application.

Préparation et test de l'application Oracle Identity Cloud Service

Configurez l'application confidentielle Oracle Identity Cloud Service pour vous connecter à l'application correspondant à votre instance Oracle Fusion Applications Cloud Service, puis testez-la.

Dans cette procédure, vous allez configurer les ressources de l'application Oracle Identity Cloud Service qui vient d'être créée afin d'ajouter un périmètre à votre application Oracle Fusion Applications Cloud Service, puis vérifier qu'un compte utilisateur autorisé du système Oracle PaaS peut obtenir un jeton pour votre instance Oracle Fusion Applications Cloud Service.
  1. Connectez-vous à Oracle Cloud Mes services, cliquez sur Utilisateurs, puis sur Console d'identité.
  2. Sélectionnez l'onglet Applications, puis localisez et sélectionnez l'application que vous venez de créer pour Oracle Functions.
  3. Modifiez la stratégie d'émission de jeton. Affectez la valeur Tout à des ressources autorisées.
  4. Ajoutez une ressource pour Oracle Applications Cloud (Fusion) avec le périmètre de l'application Fusion (il n'a pas besoin d'être protégé).
  5. Vérifiez que vous disposez d'un compte utilisateur qui existe dans Oracle PaaS et Oracle Fusion Applications Cloud Service, avec des privilèges suffisants pour accéder aux données que vous interrogez à l'aide d'un appel d'API REST. Par exemple, le rôle Administrateur des ventes peut être suffisant.
  6. Testez l'application en générant un jeton d'accès à l'aide de ces informations d'identification utilisateur. Vous pouvez générer le jeton d'accès à l'aide de la fonction Jeton de demande Postman en spécifiant la portée, la valeur Public principal de la ressource protégée OAuth d'application Oracle Fusion Applications Cloud Service Oracle Identity Cloud Service. Pour ce test simple, utilisez les informations d'identification et de connexion par mot de passe en tant que type d'octroi afin d'utiliser le nom utilisateur en tant qu'objet dans le jeton généré. (Dans un environnement de production, utilisez des informations d'identification client qui fourniront les informations utilisateur.) L'URL du jeton d'accès est formée en prenant l'URL de l'hôte Oracle Identity Cloud Service et en ajoutant /oauth2/v1/token. Par exemple, https://<your identity cloud hostname.identity.oraclecloud.com>/oauth2/v1/token.
Si tout fonctionne correctement, vous devez recevoir un jeton JWT sous forme de réponse, que vous pouvez ensuite utiliser dans un appel à l'adresse d'API REST Oracle Fusion Applications Cloud Service et recevoir la même sortie. Par exemple :
curl --location --request GET 'https://<your fusion instance>.<domain>.com/fscmRestApi/resources/11.13.18.05/expenses' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <JWT_TOKEN>'
Cette requête curl doit renvoyer des données Expenses.

Configuration de l'application Oracle Identity Cloud Service Oracle Functions en tant que client sécurisé

L'application Oracle Identity Cloud Service doit utiliser un certificat en tant que client sécurisé pour que vous puissiez envoyer des demandes OAuth à Oracle Functions. Vous pouvez générer un certificat auto-signé à utiliser pendant le développement, si aucun certificat n'est disponible.

Le script fourni genSelfSignedKeypair.sh peut être utilisé pour générer une clé si vous n'en avez pas déjà une. Exécutez le script en indiquant les valeurs d'alias de clé et de locataire. Dans cet exemple, nous avons fourni mytenant comme nom de locataire et fnassertionkey comme alias de clé.

  1. Si nécessaire, utilisez le script fourni avec les exemples de code pour que cette liasse de solutions génère un certificat :
    $ ./genSelfSignedKeypair.sh --tenant mytenant  --keyalias fnassertionkey
    ==============================================
    Generating Self Signed Certificates in Kesytore
     
     
    General Properties:
    -------------------------------
    ==> Workdir: ./genCertsDir
    ==> Tenant Name: mytenant
    ==> Key Alias: fnassertionkey
     
    Keystore Properties:
    -------------------------------
    ==> Store Type: PKCS12
    ==> Key Algorithm: RSA
    ==> Key Size: 2048
    ==> Validity time(days): 1825
    ==> Sign Algorithm: SHA256withRSA
    ==> dname: CN=mytenant FN Assertion, O=mycompany, L=mylocation, ST=mystate, C=mycountry
     
    Passwords:
    [*] Keystore Password:
    [*] PrivateKey Password:
     
    Generate keypair in keystore ./genCertsDir/mytenant-keystore.p12 ...
    Generating 2,048 bit RSA key pair and self-signed certificate (SHA256withRSA) with a validity of 1,825 days
        for: CN=mytenant FN Assertion, O=mycompany, L=mylocation, ST=mystate, C=mycountry
    [Storing ./genCertsDir/mytenant-keystore.p12]
    Export public certificate with alias fnassertionkey from generated keystore (openssl) ...
    Certificate stored in file <./genCertsDir/mytenant-fnassertionkey-cert.pem>
    Extract Private Key in PKCS8 format from generated keystore (openssl) ...
    Self Signed certificate generated successfully
    ==============================================
    Files generated:
    ==> ./genCertsDir/mytenant-keystore.p12
    ==> ./genCertsDir/mytenant-fnassertionkey-cert.pem [Stored in Keystore]
    ==> ./genCertsDir/mytenant-fnassertionkey-pkcs8-key.pem [Stored in Keystore]
    ==============================================

    Les fichiers générés seront utilisés dans votre code de fonction et dans la configuration de l'application Oracle Identity Cloud Service :

    • mytenant-keystore.p12: fichier de clés généré à utiliser dans votre code pour extraire les certificats utilisés pour le processus d'assertion.
    • mytenant-fnassertionkey-cert.pem: certificat public utilisé dans la configuration Oracle Identity Cloud Service Application.

    Le troisième fichier pem n'est pas immédiatement nécessaire, mais une version similaire sera extraite du fichier de clés mytenant-keystore.p12 dans votre code et exportée pour référence :

    • mytenant-fnassertionkey-pkcs8-key. pem : clé privée au format PKCS8
  2. Configurez votre application Oracle Functions Oracle Identity Cloud Service avec le type client sécurisé et ajoutez un certificat en utilisant l'alias de clé du certificat. Connectez-vous à Oracle Cloud Mes services, cliquez sur Utilisateurs, puis sur Console d'identité.
  3. Sélectionnez l'onglet Applications, puis l'application Oracle Identity Cloud Service que vous avez créée précédemment pour votre accès Oracle Functions.
  4. Dans la section Configuration client, recherchez le champ Certificat, entrez l'alias que vous avez utilisé pour votre certificat (dans l'exemple ci-dessus, fnassertionkey), puis cliquez sur le bouton Importer pour importer le fichier mytenant-fnassertionkey-cert.pem.

Importer les informations de fichier de clés dans Oracle Cloud Infrastructure Vault

Le processus d'assertion avec Oracle Functions exige l'utilisation du fichier de clés et des mots de passe importés. Pour une sécurité optimale et éviter l'utilisation de mots de passe et de secrets codés en dur, vous pouvez utiliser Oracle Cloud Infrastructure Vault.

Le service Oracle Cloud Infrastructure Vault permet de crypter et de stocker les données sensibles en toute sécurité. Vous pouvez stocker les mots de passe de fichier de clés et de clé publique dans un coffre, puis les référencer à l'aide du kit SDK Oracle Cloud Infrastructure dans votre back-end Oracle Functions pour effectuer l'assistant. Vous pouvez également crypter et stocker le fichier JKS en toute sécurité.

Dans la section Avant de commencer de ce guide de lecture de solution, vous devez configurer votre environnement Oracle Functions, par exemple à l'aide des guides de démarrage rapide. La configuration du guide de démarrage rapide vous demande de créer une stratégie pour les fonctions au niveau du compartiment racine. Dans l'exemple suivant, cette stratégie est nommée FnTenancyPolicy. Vous devez ajouter des instructions supplémentaires à la stratégie pour permettre à Oracle Functions d'accéder aux bases de données associées à cette stratégie. Le nom du groupe pour Oracle Functions à utiliser doit être celui que vous avez créé lors de la configuration de la location dans le guide de démarrage rapide. Dans cet exemple, fnGroup1 est le groupe d'utilisateurs qui peut utiliser Oracle Functions.

  1. Dans la console Oracle Cloud Infrastructure, sous Gouvernance et administration, accédez à Identité et cliquez sur Stratégies.
    La liste des stratégies contenues dans la catégorie en cours de visualisation apparaît.
  2. Sélectionnez le compartiment racine dans la liste à gauche.
  3. Sélectionnez le nom de votre stratégie Oracle Functions, tel que FnTenancyPolicy, puis cliquez sur Modifier des instructions de stratégie. Ajoutez les instructions suivantes :
    allow group fnGroup1 to manage secret-family in tenancy
    allow group fnGroup1 to manage vaults in tenancy
    allow group fnGroup1 to manage keys in tenancy
  4. Sélectionnez Enregistrer les modifications.
  5. Créez une instance Vault dans votre compartiment.
    1. Dans le groupe Gouvernance et administration, accédez à Sécurité et sélectionnez Coffre.
    2. Sous Portée de la liste, dans la liste Compartiment, sélectionnez le nom du compartiment dans lequel créer le coffre, puis cliquez sur Créer un coffre.
    3. Dans la boîte de dialogue Créer un coffre, cliquez sur Nom, puis entrez le nom d'affichage du coffre. Evitez de saisir des informations confidentielles dans ce champ.
    4. Si vous le souhaitez, créez un coffre privé virtuel en cochant la case Rendre un coffre privé virtuel.
    5. Sélectionnez Créer.
  6. Créez une instance de clé associée à la clé secrète.
    1. Sous Portée de la liste, dans la liste Compartiment, sélectionnez le nom du compartiment dans lequel créer la clé, puis cliquez sur le nom du coffre que vous venez de créer
    2. Sélectionnez Clés, puis Créer une clé.
    3. Dans la boîte de dialogue Créer une clé, choisissez un compartiment dans la liste Créer dans le compartiment. (Les clés peuvent exister en dehors du compartiment dans lequel se trouve le coffre.)
    4. Sélectionnez Nom, puis entrez un nom pour identifier la clé. Evitez de saisir des informations confidentielles dans ce champ.
    5. Indiquez la longueur de clé, en bits, en choisissant une longueur dans la liste Forme de clé : Longueur.
    6. Lorsque vous avez terminé, cliquez sur Créer une clé.
  7. Créez les secrets nécessaires au cas d'assertion :
    1. Mot de passe du fichier de clés
    2. Mot de passe de clé primaire
    3. Fichier de clés
    Vous devrez ajouter une représentation codée Base64 du contenu du fichier de clés. Vous pouvez le générer à l'aide de la commande openssl :
    openssl base64 -in <YourKeystoreName>.p12 -out ksBase64Encoded.txt | cat ksBase64Encoded.txt

    Copiez le contenu dans la valeur de la clé dans la clé secrète. Pour créer une clé secrète :

    1. Sous Portée de la liste, dans la liste Compartiment, sélectionnez le nom du compartiment dans lequel créer une clé secrète.
    2. Dans la liste des espaces de fichiers dans le compartiment, sélectionnez le nom du coffre que vous venez de créer.
    3. Sélectionnez Secrets, puis Créer une clé secrète.
    4. Dans la boîte de dialogue Créer une clé secrète, choisissez un compartiment dans la liste Créer dans le compartiment. (Les clés secrètes peuvent exister en dehors du compartiment dans lequel se trouve l'espace de fichiers.)
    5. Sélectionnez Nom, puis entrez un nom pour identifier la clé secrète. Evitez de saisir des informations confidentielles dans ce champ.
    6. Sélectionnez Description, puis entrez une brève description de la clé secrète pour vous aider à l'identifier. Evitez de saisir des informations confidentielles dans ce champ.
    7. Choisissez la clé de cryptage maître à utiliser pour crypter le contenu secret pendant l'import dans le coffre. (La clé doit appartenir au même espace de fichiers.)
    8. Indiquez le format du contenu secret que vous fournissez en choisissant un type de modèle dans la liste Modèle de type secret. (Vous pouvez fournir du contenu secret en texte brut lorsque vous utilisez la console pour créer une version secrète ou secrète, mais que le contenu secret doit être encodé au format base64 avant d'être envoyé au service. La console encode automatiquement le contenu secret en texte brut si vous choisissez ce format.)
    9. Sélectionnez Contenu secret, puis entrez le contenu secret. (La taille maximale autorisée pour un groupe de clés secrètes est de 25 ko.)
    10. Vous pouvez éventuellement appliquer une règle pour gérer le mode d'utilisation des secrets. Vous pouvez créer une règle concernant la réutilisation du contenu secret dans les versions d'une clé secrète, ou créer une règle spécifiant le moment où le contenu secret expire.
    11. Lorsque vous avez terminé, sélectionnez Créer une clé secrète.
    12. Répétez ces étapes pour chaque secret à créer.
  8. Créer un groupe dynamique :
    1. Dans la console, sélectionnez Identité, puis Groupes dynamiques.
      La liste des groupes dynamiques dans votre location est affichée.
    2. Sélectionnez Créer un groupe dynamique.
    3. Entrez un nom pour le groupe dynamique. Conservez le nom pour une utilisation ultérieure. Le nom doit être unique dans tous les groupes de la location. Vous ne pouvez pas modifier ce nom ultérieurement.
    4. Saisissez une description. Vous ne pouvez pas modifier la description ultérieurement à l'aide de la console, mais vous pouvez la modifier en utilisant l'API.
    5. Dans la section Règles de mise en correspondance, entrez la règle suivante (utilisez l'OCID de votre compartiment) :
      ALL { resource.type = 'fnfunc', resource.compartment.id = 'ocid1.compartment.oc1..xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'}
    6. Sélectionnez Créer un groupe dynamique.
      La syntaxe de règle de correspondance est vérifiée, mais les OCIDs ne le sont pas. Assurez-vous que les OCIDs que vous saisissez sont corrects.
  9. Ajoutez une instruction à la stratégie que vous avez créée pour Oracle Functions au niveau du compartiment racine dans le Guide de démarrage rapide Oracle Functions, afin d'autoriser le groupe dynamique que vous venez de créer pour accéder à vos clés secrètes.
    1. Sous Gouvernance et administration, accédez à Identité et cliquez sur Stratégies.
      La liste des stratégies contenues dans la catégorie en cours de visualisation apparaît.
    2. Sélectionnez le compartiment racine dans la liste.
    3. Sélectionnez le nom de votre stratégie Oracle Functions, tel que FnTenancyPolicy, puis cliquez sur Modifier des instructions de stratégie. Ajoutez l'instruction suivante :
      allow dynamic-group your_fn_group to read secret-family in tenancy
Avec la fonction Secrets Vault configurée, vous pouvez utiliser les identificateurs d'objet pour chaque secret afin d'y accéder à l'aide du kit SDK Oracle Cloud Infrastructure. Les propriétés V_KEYSTORE, V_KS_PASS et V_PK_PASS seront utilisées dans les exemples de fonctions décrits plus loin dans cette solution.

Configurer l'application Oracle Visual Builder dans Oracle Identity Cloud Service

Les applications Oracle Visual Builder sont associées à une application Oracle Identity Cloud Service qui est automatiquement configurée en tant que client sécurisé. Vous devez configurer cette application pour qu'elle puisse être utilisée en tant que client de la ressource Oracle Functions.

Dans le cadre de l'interaction présentée dans l'architecture proposée, une application Oracle Visual Builder associée à une instance Oracle Identity Cloud Service et fédérée à Oracle Fusion Applications Cloud Service et connectée à Oracle Functions doit pouvoir générer un jeton d'accès pouvant accéder à API Gateway et aux ressources Oracle Functions (tel que défini par Scope). Vous devez configurer l'application Oracle Visual Builder dans Oracle Identity Cloud Service pour la définir en tant que client de la ressource qui étend la fonctionnalité SaaS en ajoutant la portée de la nouvelle application Oracle Functions que vous avez créée.

Lorsque vous créez une application dans Oracle Visual Builder, une application Oracle Identity Cloud Service est automatiquement créée. Par exemple, si vous créez une application nommée TestSaaSExtensionFN, vous pouvez accéder à la console Oracle Identity Cloud Service et répertorier les applications, et vous devez trouver une application appelée TestSaaSExtensionFN.

  1. Créez une application Oracle Visual Builder.
  2. Dans Oracle Identity Cloud Service, accédez à l'application correspondant à votre nouvelle application Oracle Visual Builder.
  3. Dans la section Stratégie d'émission de jeton, définissez Ressources autorisées sur Spécifique et utilisez le bouton Ajouter un périmètre pour ajouter une ressource dans le champ d'application de votre instance de passerelle d'API Oracle Functions.
    Si l'URL de redirection est marquée comme obligatoire dans l'application IDCS VBCS, cela est dû au fait que, dans Configuration client, la case à cocher Implicite dans Types d'octroi autorisés est cochée. Dans ce cas, vous devrez fournir une URL pour l'application Web Oracle Visual Builder dans cette entrée. Vous pouvez mettre à jour ces valeurs ultérieurement en fonction de vos besoins.
Répétez ce processus pour ajouter la portée de chaque application Oracle Visual Builder supplémentaire dans Oracle Identity Cloud Service qui doit être en mesure d'accéder à l'application Oracle Functions API Gateway.