Crea distribuzioni gateway API

Grazie alle funzioni descritte, è possibile integrare e verificare il meccanismo di autenticazione nativo per la convalida JWT con Oracle Identity Cloud Service.

Crea distribuzione gateway API con convalida JWT nativa

Utilizzando la funzione di convalida JWT nativa del gateway Oracle Cloud Infrastructure, è possibile aggiungere un criterio di autenticazione basato su token Web Java (JWT) per la distribuzione.

Questo tipo JWT consente di specificare i dati richiesti per eseguire la convalida del token di accesso in entrata (tramite intestazione o parametro). Il criterio richiede le seguenti informazioni:

  • Emittenti consentiti: istituti di emissione token. Vengono visualizzati diversi server OAuth, ma in questo caso verrà utilizzato https://identity.oraclecloud.com/.
  • Audience: le risorse a cui accedere per questo token.
  • Chiavi pubbliche: il set di chiavi Web (JWKS) Json da utilizzare per convalidare il token, all'interno degli emittenti e delle audience. Sono consentiti due tipi di JWKS:
    • Chiavi statiche: con questa opzione è necessario specificare manualmente JWKS utilizzando il formato JSON, che deve avere le proprietà richieste in base alla direttiva RFC 7517 Sezione 4.
    • Chiavi remote: questa opzione consente di specificare un URL dal quale è possibile utilizzare JWKS mediante REST. Per limite di questa funzione si intende che l'URL specificato deve essere non protetto, poiché attualmente questa funzione non supporta la possibilità di leggere URL protetti per recuperare JWKS.
  • Opzioni avanzate:
    • Numero massimo di disallineamento, in secondi: se il gateway API e il provider di identità presentano alcune differenze nella tempificazione, questo valore consente di regolare il tempo della finestra di validità del token per tentare di allineare la tempificazione tra i due servizi.
    • Richieste: per verificare le richieste di rimborso se è necessario il token in entrata. Ad esempio, client_id richiesta di rimborso o user_id.

Creare un nuovo nome di distribuzione nel gateway API con un instradamento per raggiungere la funzione creata nei passi precedenti utilizzando l'endpoint e la convalida JWT. In questo esempio, la distribuzione viene denominata my_jwt_test.

  1. Nella pagina Gateway API della console di Oracle Cloud Infrastructure, selezionare il gateway attivo facendo clic sul relativo nome.
  2. In Risorse selezionare Distribuzioni, quindi Crea distribuzione.
  3. Configurare il criterio di autenticazione con i valori riportati di seguito.
    • Tipo di autenticazione: JWT
    • Token di autenticazione: Intestazione
    • Nome intestazione: Autorizzazione
    • Schema di autenticazione: Intestatario
    • Abilita accesso anonimo: abilitato
  4. Aggiungere il dominio Oracle Identity Cloud Service come emittente consentito, in modo da poterlo utilizzare come generatore di token. In Emittenti, impostare Emissioni consentite su https://identity.oraclecloud.com/
  5. Aggiungere un audience. Impostare un'audience consentita sull'URL dell'applicazione Oracle Identity Cloud Service Oracle Functions. Ad esempio, https://myinstance.apigateway.mydc.oci.customer-oci.com.
    Gli audience da convalidare devono essere quelli delle risorse alle quali il token generato deve poter accedere. In questo caso, si prevede che il token dell'applicazione Oracle Identity Cloud Service sia il client del proprietario della risorsa applicativa Oracle Functions Oracle Identity Cloud Service, che ha come ambito le audience principali dell'applicazione Oracle Functions Oracle Identity Cloud Service.
  6. Aggiungere la funzione JWK da utilizzare per convalidare il token JWT in entrata: JWKS remoto o statico. Per aggiungere un indirizzo JWKS remoto, effettuare le operazioni riportate di seguito.
    1. Accedere alla console di Oracle Identity Cloud Service.
    2. Selezionare Impostazioni, quindi Impostazioni predefinite.
    3. Se non è già abilitato, selezionare Certificato di firma di accesso, fare clic su Salva, quindi fare clic su .
    4. Accedere all'URL JWK dell'istanza di Oracle Identity Cloud Service. Ad esempio: https://idcs-myinstance.identity.dc1.oraclecloud.com/admin/v1/SigningCert/jwk.
    5. Dopo la convalida dell'URL JWK, tornare a Gateway API e configurare le chiavi pubbliche. Impostare il campo Tipo su JWKS remoto e impostare l'URI sull'URL appena convalidato.
  7. Per aggiungere un indirizzo JWKS statico, effettuare le operazioni riportate di seguito.
    1. Definire il form Chiave statica. A tale scopo, è necessario richiedere l'indirizzo JWK di Oracle Identity Cloud Service. È possibile effettuare questa operazione con le curve. ad esempio:
      ## 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. Configurare le chiavi pubbliche nel gateway API. Impostare Tipo su Chiavi statiche. Impostare l'ID chiave su SIGNING_KEY e il formato su Chiave Web JSON. Incollare in una chiave Web JSON utilizzando solo il seguente subset dei valori ottenuti da Oracle Identity Cloud Service.
      Al momento, il gateway API supporta solo determinate proprietà della chiave JWK. Invece della proprietà key_ops, utilizzare la proprietà use.
      {
              "kty":"RSA",
              "e":"<value>",
              "kid":"SIGNING_KEY",
              "use":"sig",
              "alg":"RS256",   
              "n":"<value>"
      }
  8. Facoltativamente, è possibile aggiungere ulteriore convalida nella sezione Verifica richieste di rimborso. Aggiungere una richiesta client_id per consentire solo i valori corrispondenti all'applicazione Oracle Identity Cloud Service associata all'applicazione Oracle Visual Builder. Se si dispone di più applicazioni Oracle Visual Builder e i token OAuth verranno generati utilizzando diverse applicazioni Oracle Identity Cloud Service Oracle Visual Builder, sarà necessario aggiungere tutti gli ID client Oracle Identity Cloud Service a questo passo di verifica. Impostare la chiave richiesta su client_id, immettere uno o più valori richiesta e selezionare la casella di controllo Obbligatorio.
  9. Facoltativamente, è possibile configurare CORS per consentire le richieste provenienti dai domini specificati. Ad esempio, potrebbe essere necessario consentire i nomi host del server Oracle Visual Builder come origini di richieste consentite. Impostare Origini consentite per gli URL dei server, intestazioni esposte in autorizzazione, intestazioni consentite per autorizzazione, abilitazione credenziali in e metodi consentiti su GET, POST.
  10. Creare un instradamento che punti alla funzione, ad esempio la funzione di esempio saasopportunitiesfn. Impostare Percorso su /assertion/facall, Metodi su GET e POST, Tipo su Oracle Functions, assicurarsi che l'applicazione in <compartimento> disponga del compartimento corretto selezionato, impostare l'applicazione sul nome dell'applicazione, ad esempio myapplication, e impostare Nome funzione sul nome della funzione, ad esempio saasopportunitiesfn.
Dopo aver salvato le modifiche, è possibile controllare il contenuto del payload my_jwt_test di distribuzione del gateway API.

Test richiamo REST endpoint

Per verificare il nuovo richiamo REST dell'endpoint, è possibile utilizzare la funzione Ottieni nuovo token di accesso di Postman.

Tenere presente che se si utilizza il token generato nei passi riportati di seguito, non sarà possibile raggiungere direttamente gli endpoint Oracle Fusion Applications Cloud Service poiché il token è stato generato con l'applicazione Oracle Identity Cloud Service da Oracle Visual Builder e sarà possibile raggiungere Oracle Functions solo con la configurazione corrente, in base agli ambiti impostati in precedenza. Inoltre, se si utilizza un'applicazione Oracle Identity Cloud Service diversa per generare il token e tale applicazione non dispone dei privilegi per raggiungere l'ambito delle risorse Oracle Functions, il gateway API non consentirà la richiesta (restituisce un errore 401) perché è stato aggiunto l'audience della risorsa Oracle Identity Cloud Service di Oracle Functions. Se sono state aggiunte verifiche ID client delle richieste, il gateway API garantisce che i token corrispondano solo a quelli specificati da Oracle Identity Cloud Service Apps client_ids.

Utilizzare i seguenti parametri per eseguire il test:

  • Tipo di autorizzazione: Credenziali password: questo tipo di autorizzazione viene utilizzato per garantire che il nome utente fornito sia l'oggetto nel token generato.
  • URL token di accesso: l'URL OAuth dell'istanza di Oracle Identity Cloud Service. Ad esempio, https://idcs-myinstance.identity.dc1.oraclecloud.com/oauth2/v1/token.
  • Nome utente: utente esistente sia in Oracle Identity Cloud Service che in Oracle Fusion Applications Cloud Service con privilegi appropriati in entrambi.
  • Password: immettere la password per l'utente.
  • ClientId: l'ID della risorsa Oracle Functions di Oracle Identity Cloud Service Client associata a Oracle Visual Builder.
  • ClientSecret: il segreto client della risorsa Oracle Functions del client Oracle Identity Cloud Service App associata a Oracle Visual Builder.
  • Ambito: questo ambito deve corrispondere alle risorse fornite dall'applicazione Oracle Identity Cloud Service Oracle Functions. Ad esempio, https://myservice.apigateway.dc1.oci.customer-oci.com/saasextension
  1. Richiamare l'instradamento configurato in modo che punti alla funzione di asserzione mediante Postman e i parametri elencati in precedenza.
  2. In alternativa, utilizzare curl. ad esempio:
    curl --location --request GET 'https://myservice.apigateway.dc1.oci.customer-oci.com/saasextension/assertion/facall' \
    --header 'Authorization: Bearer <JWT_TOKEN>'
È consigliabile ottenere un risultato in uno dei due modi riportati di seguito.
{
  "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"
      }
    ]
  }
}

Crea una distribuzione del gateway API con l'autenticazione personalizzata

Utilizzare questo approccio se si sceglie di utilizzare una funzione di autenticazione personalizzata per convalidare il token Bearer per le chiamate in entrata agli endpoint del gateway API.

Si tratta della funzione facoltativa definita se si è seguiti i passi dalla sezione Se si desidera definire una funzione di autenticazione in Oracle Cloud Infrastructure.

  1. Per distribuire il gateway API, nella pagina Gateway API selezionare il gateway attivo facendo clic sul relativo nome.
  2. In Risorse fare clic su Distribuzioni, quindi fare clic su Crea distribuzione.
  3. Utilizzando la modalità "From Scratch", è possibile fare clic nella procedura guidata per distribuire il gateway API.
    In alternativa, è possibile scegliere di caricare un file di definizione della distribuzione, come descritto di seguito.

Lo snippet di codice seguente è un esempio di file JSON della specifica di distribuzione dell'API Oracle Cloud Infrastructure che è possibile utilizzare per eseguire la distribuzione anziché utilizzare la procedura guidata. In questo file è possibile visualizzare:

  • Righe 1-8: criterio di richiesta autenticazione. Questa è la definizione che indica che per qualsiasi richiesta in questa distribuzione deve richiamare prima questa funzione (functionId), passando tokenHeader e, se restituisce true, altrimenti rispondere con un messaggio non autorizzato HTTP.
  • Righe 9-17: una definizione CORS per gestire e controllare la condivisione delle risorse tra origini.
  • Righe 18-43: due punti di inserimento URL o oggetti finali per singole funzioni in 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>