Créer des déploiements de passerelle d'API

Grâce à vos fonctions prêtes, vous pouvez intégrer et tester le mécanisme d'authentification natif pour la validation JWT avec Oracle Identity Cloud Service.

Créer un déploiement de passerelle d'API avec une validation JWT native

L'utilisation de la fonctionnalité de validation JWT native de passerelle Oracle Cloud Infrastructure permet d'ajouter une stratégie d'authentification basée sur un jeton Web Java (JWT) pour votre déploiement.

Ce type JWT permet d'indiquer les données requises pour effectuer la validation du jeton d'accès entrant (via un en-tête ou un paramètre). La stratégie exige les informations suivantes :

  • Emetteurs autorisés : émetteurs de jeton. Plusieurs serveurs OAuth sont présents, mais dans ce cas, vous utiliserez https://identity.oraclecloud.com/.
  • Publics : ressources auxquelles l'accès pour ce jeton doit être autorisé.
  • Clés publiques : ensemble de clés Web JSON (JWKS) à utiliser pour valider le jeton, dans les émetteurs et les publics. Deux types de JWKS sont autorisés :
    • Clés statiques : avec cette option, vous devez définir JWKS manuellement au format JSON, qui doit avoir les propriétés requises conformément à la section 4 RFC 7517.
    • Clés distantes : Avec cette option, vous devez indiquer une URL à partir de laquelle JWKS peut être utilisé via REST. Pour se limiter, l'URL indiquée ne doit pas être protégée, car elle ne prend pas en charge la lecture d'URL protégées pour extraire JWKS.
  • Options avancées:
    • Décalage maximal de couches en secondes : si la passerelle d'API et le fournisseur d'identités présentent des différences dans le temps, cette valeur vous permet d'ajuster le temps de validité du jeton pour essayer d'aligner le temps entre les deux services.
    • Réclamations : permet de vérifier les réclamations si le jeton entrant est requis. Par exemple, client_id claim ou user_id claim.

Créez un nom de déploiement dans votre passerelle d'API avec un acheminement pour atteindre la fonction créée dans les étapes précédentes, en utilisant l'adresse et la validation JWT. Dans cet exemple, le déploiement est nommé : my_jwt_test.

  1. Dans la console Oracle Cloud Infrastructure, sur la page passerelle d'API, sélectionnez la passerelle active en cliquant sur son nom.
  2. Sous Ressources, sélectionnez Déploiements, puis Créer un déploiement.
  3. Configurez la stratégie d'authentification à l'aide des valeurs suivantes :
    • Type d'authentification : JWT
    • Jeton d'authentification : en-tête
    • Nom de l'en-tête : Authorization
    • Modèle d'authentification : Service support
    • Activer l'accès anonyme : activé
  4. Ajoutez le domaine Oracle Identity Cloud Service en tant qu'émetteur autorisé, afin de pouvoir l'utiliser en tant que générateur de jeton. Dans Emetteurs, définissez Emetteurs autorisés sur https://identity.oraclecloud.com/
  5. Ajoutez une audience. Définissez une audience autorisée sur l'URL de votre application Oracle Identity Cloud Service Oracle Functions. Par exemple, https://myinstance.apigateway.mydc.oci.customer-oci.com.
    Les audiences à valider doivent être celles des ressources auxquelles le jeton généré doit pouvoir accéder. Dans ce cas, nous attendons le jeton de l'application Oracle Identity Cloud Service qui est le client du propriétaire de la ressource d'application Oracle Functions Oracle Identity Cloud Service, qui dispose comme étendue de ressource les audiences principales de l'application Oracle Functions Oracle Identity Cloud Service.
  6. Ajoutez la fonction JWK à utiliser pour valider le jeton JWT entrant : JWKS distant ou statique. Pour ajouter une JWKS distante :
    1. Accédez à la console Oracle Identity Cloud Service.
    2. Sélectionnez Paramètres, puis Paramètres par défaut.
    3. Si elle n'est pas déjà activée, sélectionnez Certificat de signature d'accès, cliquez sur Enregistrer, puis sur Oui.
    4. Accéder à l'URL JWK pour votre instance Oracle Identity Cloud Service. Par exemple : https://idcs-myinstance.identity.dc1.oraclecloud.com/admin/v1/SigningCert/jwk.
    5. Une fois que vous avez validé l'affichage de l'URL JWK, revenez à la passerelle API et configurez les clés publiques. Définissez le type sur JWKS distant et définissez l'URI sur l'URL que vous venez de valider.
  7. Pour ajouter une JWKS statique :
    1. Définissez le formulaire Clé statique. Pour ce faire, vous devez demander la fonction JWK pour Oracle Identity Cloud Service. Pour ce faire, vous pouvez utiliser curl. Par exemple :
      ## Get access token to be able to invoke protected /admin/v1/SigningCert/jwk endpoint.
      # Clientid and ClientSecret should be from an existing IDCS Application in the stripe.
      #
      $ curl -X POST -u "<clientId>:<clientSecret>" https://idcs-myinstance.identity.dc1.oraclecloud.com/oauth2/v1/token -d "grant_type=client_credentials&scope=urn:opc:idm:__myscopes__"
       
       
      export jwtToken="<RETRIEVED_TOKEN>"
       
      ## Get JWK
      $ curl -X GET  https://idcs-myinstance.identity.dc1.oraclecloud.com/admin/v1/SigningCert/jwk -H "Authorization: Bearer ${jwtToken}"
       
      {
          "keys":[{
              "kty":"RSA",
              "x5t#S256":"<value>",
              "e":"<value>",
              "x5t":"<value>",
              "kid":"SIGNING_KEY",
              "x5c":["<value>"],
              "key_ops":["encrypt","verify","wrapKey"],
              "alg":"RS256",
              "n":"<value>"
          }]
      }
    2. Configurez les clés publiques dans la passerelle d'API. Définissez le champ Type sur Clés statiques. Définissez l'ID de clé sur SIGNING_KEY et le format sur Clé Web JSON. Collez la clé Web JSON en utilisant uniquement le sous-ensemble suivant de valeurs obtenues auprès d'Oracle Identity Cloud Service.
      Seules certaines propriétés de la clé JWK sont actuellement prises en charge par API Gateway. A la place de la propriété key_ops, utilisez la propriété use.
      {
              "kty":"RSA",
              "e":"<value>",
              "kid":"SIGNING_KEY",
              "use":"sig",
              "alg":"RS256",   
              "n":"<value>"
      }
  8. Vous pouvez, si nécessaire, ajouter une validation supplémentaire dans la section Vérifier les réclamations. Ajoutez une réclamation client_id pour autoriser uniquement les valeurs correspondant à l'application Oracle Identity Cloud Service associée à votre application Oracle Visual Builder. Si vous disposez de plusieurs applications Oracle Visual Builder et que les jetons OAuth seront générés à l'aide de plusieurs applications Oracle Visual Builder Oracle Identity Cloud Service, vous devrez ajouter tous les ID client Oracle Identity Cloud Service à cette étape de vérification. Définissez la clé de réclamation sur client_id, entrez une ou plusieurs valeurs de réclamation, puis cochez la case Obligatoire.
  9. Vous pouvez également configurer CORS de façon à autoriser les demandes provenant des domaines spécifiés. Par exemple, vous devrez peut-être autoriser les noms d'hôte du serveur Oracle Visual Builder à indiquer l'origine autorisée des demandes. Définir les origines autorisées sur les URL de vos serveurs, les en-têtes affichés sur Autorisation, les en-têtes autorisés sur Autorisation, l'option Autoriser les informations d'identification sur Oui et les méthodes autorisées sur GET, POST.
  10. Créez une route pour pointer vers votre fonction, telle que l'exemple de fonction saasopportunitiesfn. Définissez le chemin sur /assertion/facall, Méthodes sur GET et POST, Type sur Oracle Functions, assurez-vous que l'application dans <votre compartiment> dispose du compartiment approprié sélectionné, configurez l'application sur le nom de l'application, tel que myapplication, et définissez le nom de fonction sur le nom de la fonction, par exemple saasopportunitiesfn.
Une fois les modifications enregistrées, vous pouvez passer en revue le contenu des données traitées my_jwt_test de déploiement de passerelle d'API.

Appel REST d'adresse de test

Pour tester l'appel REST de la nouvelle adresse, vous pouvez utiliser la fonction Obtenir un nouveau jeton d'accès de Postman.

Si vous utilisez le jeton généré dans les étapes suivantes, vous ne pourrez pas atteindre les adresses Oracle Fusion Applications Cloud Service directement, car le jeton a été généré avec l'application Oracle Identity Cloud Service de Oracle Visual Builder et il ne peut atteindre Oracle Functions qu'avec la configuration en cours, selon les portées précédemment configurées. En outre, si vous utilisez une application Oracle Identity Cloud Service différente pour générer le jeton et que cette application ne dispose pas des autorisations nécessaires pour atteindre la portée de ressource Oracle Functions, la passerelle d'API ne permet pas la demande (elle renverra une erreur 401) car vous avez ajouté l'audience de la ressource Oracle Identity Cloud Service Oracle Functions. Si vous avez ajouté des vérifications client-id Claims, la passerelle API vérifie que les jetons correspondent uniquement à ceux indiqués par Oracle Identity Cloud Service Apps client_ids.

Utilisez les paramètres suivants pour le test :

  • Type d'octroi : informations d'identification et de connexion par mot de passe - Ce type d'octroi est utilisé pour garantir que le nom utilisateur fourni sera le sujet dans le jeton généré.
  • URL du jeton d'accès : URL OAuth de votre instance Oracle Identity Cloud Service. Par exemple, https://idcs-myinstance.identity.dc1.oraclecloud.com/oauth2/v1/token.
  • Nom utilisateur : utilisateur qui existe dans Oracle Identity Cloud Service et dans Oracle Fusion Applications Cloud Service avec les privilèges appropriés dans les deux.
  • Mot de passe : entrez le mot de passe de cet utilisateur.
  • ClientId: ID de la ressource Oracle Functions du client Oracle Identity Cloud Service associée à Oracle Visual Builder.
  • ClientSecret: la clé secrète client de la ressource Oracle Functions du client d'application Oracle Identity Cloud Service associée à Oracle Visual Builder
  • Périmètre : cette portée doit correspondre aux ressources fournies par l'application Oracle Identity Cloud Service Oracle Functions. Par exemple, https://myservice.apigateway.dc1.oci.customer-oci.com/saasextension
  1. Appelez l'acheminement configuré pour pointer vers votre fonction d'assertion à l'aide de Postman et des paramètres répertoriés ci-dessus.
  2. Sinon, utilisez curl. Par exemple :
    curl --location --request GET 'https://myservice.apigateway.dc1.oci.customer-oci.com/saasextension/assertion/facall' \
    --header 'Authorization: Bearer <JWT_TOKEN>'
Vous devez obtenir un résultat issu de l'un ou l'autre des outils, comme suit :
{
  "principal": "mary.jane",
  "gotPrincipalFrom": "BEARER",
  "statusCode": "200",
  "response": {
    "items": [],
    "count": 0,
    "hasMore": false,
    "limit": 25,
    "offset": 0,
    "links": [
      {
        "rel": "self",
        "href": "https://myfusionservice.fa.dc1.oraclecloud.com:443/fscmRestApi/resources/11.13.18.05/expenses",
        "name": "expenses",
        "kind": "collection"
      }
    ]
  }
}

Créer éventuellement un déploiement de passerelle d'API avec une authentification personnalisée

Cette approche permet d'utiliser une fonction d'authentification personnalisée pour valider le jeton Bearer des appels entrants vers des adresses de passerelle d'API.

Il s'agit de la fonction facultative que vous avez définie si vous avez suivi les étapes de la section Définir une fonction d'authentification dans Oracle Cloud Infrastructure (facultatif).

  1. Pour déployer la passerelle d'API, dans la page Passerelle d'API, sélectionnez la passerelle active en cliquant sur son nom.
  2. Sous Ressources, cliquez sur Déploiements, puis sur Créer un déploiement.
  3. En mode Entièrement nouveau, vous pouvez cliquer sur l'assistant pour déployer la passerelle d'API.
    Vous pouvez également choisir de télécharger un fichier de définition de déploiement, comme décrit ci-dessous.

Le fragment de code suivant est un exemple de fichier JSON de spécification de déploiement d'API Oracle Cloud Infrastructure que vous pouvez utiliser à la place de l'assistant. Ce fichier peut contenir les éléments suivants :

  • Lignes 1-8: stratégie de demande d'authentification. Il s'agit de la définition qui indique, pour toute demande dans ce déploiement, appelez d'abord cette fonction (functionId), en transmettant tokenHeader et, si elle renvoie la valeur True, continuez, et répondez par un message HTTP non autorisé.
  • Lignes 9-17: définition CORS permettant de gérer et de contrôler le partage CORS.
  • Lignes 18-43: deux points d'entrée d'URL/VERB pour chaque fonction dans FaaS.
{
    "requestPolicies": {
      "authentication": {
        "type": "CUSTOM_AUTHENTICATION",
        "isAnonymousAccessAllowed": true,
        "functionId": "OCID1.fnfunc.oc1.phx.xxxxxxxxxxxxxxx",
        "tokenHeader": "Authorization"
      }
      "cors":{ 
         "allowedOrigins": [<list-of-origins>], 
         "allowedMethods": [<list-of-methods>], 
         "allowedHeaders": [<list-of-implicit-headers>], 
         "exposedHeaders": [<list-of-exposed-headers>], 
         "isAllowCredentialsEnabled": <true|false>, 
         "maxAgeInSeconds": <seconds> 
      } 
    },
    "routes": [
      {
        "path": "/opportunities",
        "methods": [
          "GET"
        ],
        "requestPolicies": {},
        "backend": {
          "type": "ORACLE_FUNCTIONS_BACKEND",
          "functionId": "OCID1.fnfunc.oc1.phx.xxxxxxxxxxxxxxx"
 
        }
      },
      {
        "path": "/opportunities/{optyid}",
        "methods": [
          "PATCH"
        ],
        "requestPolicies": {},
        "backend": {
          "type": "ORACLE_FUNCTIONS_BACKEND",
          "functionId": "OCID1.fnfunc.oc1.phx.xxxxxxxxxxxxxxx"
        }
      }
    ]
  }
</seconds></true|false></list-of-exposed-headers></list-of-implicit-headers></list-of-methods></list-of-origins>