Uso di OAuth 2 per accedere all'API REST

L'API REST dei domini di Identity supporta gli endpoint conformi a SCIM 2.0 con gli schemi di base SCIM 2.0 standard e le estensioni degli schemi Oracle per gestire a livello di programmazione utenti, gruppi, applicazioni e funzioni di identità, ad esempio la gestione delle password e i task amministrativi. Per effettuare chiamate API REST al dominio di Identity, è necessario un token di accesso OAuth2 da utilizzare per l'autorizzazione. Il token di accesso fornisce una sessione (con ambito e scadenza) che l'applicazione client può utilizzare per eseguire task in un dominio di Identity.

Il seguente diagramma di sequenza illustra un esempio di base del flusso di autorizzazione OAuth 2.0 per accedere all'API REST dei domini di Identity.

Diagramma che illustra un esempio di base del flusso di autorizzazione OAuth 2.0 per accedere all'API REST dei domini di Identity.

Utilizzare parametri OAuth 2.0 specifici quando si utilizza un dominio di Identity. La tabella seguente descrive i parametri più comuni.

Parametro Valore Commenti

Header autorizzazione

<base64_clientid_secret> di base

Utilizzato dal client come schema di autenticazione di base per trasmettere il token di accesso in un'intestazione. Il valore del token di accesso deve essere un valore con codifica UTF-8 base64 dell'ID client e del segreto client concatenati utilizzando i due punti come separatore, ad esempio clientID:clientSecret.

ID client

<client_id>

obbligatorio. Una "chiave API" univoca generata quando si registra l'applicazione nella console del dominio di Identity.

Segreto client

<client_secret>

obbligatorio. Chiave privata simile a una password generata quando si registra l'applicazione nella console del dominio di Identity. Non condividere questo valore.

URL token di accesso

/oauth2/v1/token

Endpoint utilizzato per ottenere un token di accesso dal dominio di Identity.

URL autent.

/oauth2/v1/authorize

Endpoint utilizzato per ottenere un codice di autorizzazione dai domini di Identity, quindi utilizzato durante un flusso OAuth a 3 fasi.

Tipo di privilegio

client_credentials

obbligatorio. Significa che l'API REST richiamata è di proprietà dell'applicazione client.

Ambito (obbligatorio)

urna:opc:idm:__myscopes__

Questo ambito restituisce tutti i privilegi concessi all'applicazione. Se necessario, è possibile utilizzare altri ambiti per ottenere privilegi specifici.

Passo 1: registrare un'applicazione riservata nei domini di Identity mediante la console

Quando si registra un'applicazione riservata nella console del dominio di Identity, si ottengono alcuni dei parametri chiave necessari per utilizzare OAuth 2.0: ID client, Segreto client e Ambiti. OAuth 2.0 è uno standard per l'implementazione dell'autorizzazione delegata e l'autorizzazione si basa sul token di accesso necessario per accedere a una risorsa. Il token di accesso può essere emesso per un determinato ambito, che definisce le azioni che il token di accesso può eseguire e le risorse a cui può accedere. Quando si registra un'applicazione Web in un dominio di Identity, si aggiungono gli ambiti. Nell'esempio riportato di seguito vengono aggiunti gli ambiti necessari per richiedere le ricerche, le modifiche, la creazione e l'eliminazione degli utenti. Tuttavia, se si dovessero eseguire altre operazioni, ad esempio la gestione degli eventi di audit, ciò richiederebbe altri ambiti.

Per creare e registrare un'applicazione riservata, accedere a OCI Console, quindi completare i passi riportati di seguito.

  1. Aprire il menu di navigazione e selezionare Identità e sicurezza. In Identità, selezionare Domini.
  2. Fare clic sul nome del dominio di Identity in cui si desidera lavorare. Potrebbe essere necessario modificare il compartimento per trovare il dominio desiderato. Fare quindi clic su Applicazioni integrate.
  3. Selezionare Aggiungi applicazione.
  4. Nella finestra di dialogo Aggiungi applicazione, selezionare Applicazione riservata, quindi selezionare Avvia workflow.
  5. Nella pagina Aggiungi dettagli applicazione, immettere un nome e una descrizione per l'applicazione, quindi selezionare Successivo.
  6. Nella pagina Configure OAuth, in Configurazione client, selezionare Configure this application as a client now.
  7. In Autorizzazione, selezionare solo Credenziali client come Tipo di privilegio consentito.
  8. Nella parte inferiore della pagina selezionare Aggiungi ruoli applicazione, quindi selezionare Aggiungi ruoli.
  9. Nel pannello Aggiungi ruoli applicazione, selezionare Amministratore dominio di Identity, quindi selezionare Aggiungi.
  10. Selezionare Avanti e quindi Fine.
  11. Nella pagina dei dettagli dell'applicazione, scorrere fino a Informazioni generali. Copiare i valori ID client e Segreto client e memorizzarlo in un luogo sicuro.
  12. Dopo aver creato l'applicazione, selezionare Attiva.

Passo 2: Base64 Codificare l'ID client e il segreto client

È necessario codificare l'ID client e il segreto client quando lo si include in una richiesta per un token di accesso.
Nota

Prima della codifica base64, i singoli URL codificano l'ID client e il segreto client. Se l'ID client e il segreto client non contengono caratteri speciali, non è necessario codificarli prima tramite URL. Tuttavia, come best practice, lo consigliamo vivamente.
Le sezioni seguenti mostrano come codificare base64 l'ID client e il segreto client in formato UTF-8 utilizzando un ambiente Windows e un ambiente Mac/Linux.

Windows

  1. Avviare Blocco note, quindi incollare l'ID client e il segreto client in Blocco note.

  2. Posizionare l'ID client e il segreto client sulla stessa riga e inserire i due punti tra di essi: clientid:clientsecret

    Nota

    Assicurarsi che gli spazi non siano l'attributo clientid:clientsecret.
  3. Salvare il file in C:\temp e assegnare un nome al file appCreds.txt.

  4. In Esplora risorse, fare clic con il pulsante destro del mouse su C:\temp, quindi selezionare Richiesta CMD qui dal menu di scelta rapida.

  5. Immettere il comando seguente per codificare l'ID client e il segreto client:
    certutil -encode appCreds.txt appbase64Creds.txt
  6. In Blocco note aprire C:\temp\appbase64Creds.txt, copiarne il contenuto e chiudere il file.
    Nota

    Per motivi di sicurezza, eliminare i file appCreds.txt e appbase64Creds.txt al termine delle operazioni.

Mac e Linux

  1. Avviare l'utilità nota preferita (ad esempio, Mac Notes, Gedit Linux o Vi), quindi incollare l'ID client e il segreto client nell'utilità nota.

  2. Posizionare l'ID client e il segreto client sulla stessa riga e inserire i due punti tra di essi: clientid:clientsecret.

    Nota

    Assicurarsi che non vi siano spazi nel file clientid:clientsecret.
    istruzione.
  3. Copiare la riga clientid:clientsecret.

  4. Avviare un terminale e immettere il comando seguente, sostituendo clientid:clientsecret con il valore copiato negli Appunti.

    echo -n "clientid:clientsecret" | base64 -w 0
    Nota

    Per Linux, aggiungere -w 0 al comando per rimuovere le interruzioni di riga.
  5. Copiare il valore restituito.
    Nota

    Se il valore restituito viene suddiviso in più righe, tornare all'editor di testo e assicurarsi che l'intero risultato si trovi su una singola riga senza ritorno a capo.

Passo 3: ottenere un token di accesso

Il passo successivo di questo processo consiste nel richiedere il token di accesso.

  1. Avviare un prompt dei comandi.

  2. Immettere il comando cURL riportato di seguito, sostituendo il testo tra parentesi ( < > ) con i valori appropriati:

       curl -i
       -H "Authorization: Basic <base64encoded clientid:secret>"
       -H "Content-Type: application/x-www-form-urlencoded;charset=UTF-8"
       --request POST https://<domainURL>/oauth2/v1/token
       -d "grant_type=client_credentials&scope=urn:opc:idm:__myscopes__"
    Nota

    Se si utilizza un sistema operativo UNIX, è possibile aggiungere | awk -F"\"" '{print $4}' alla fine del comando cURL per analizzare solo il token del servizio di trasporto. Ricorda che la scadenza predefinita del token è di 3600 secondi dal momento della richiesta.
    Nota

    Facoltativamente, eseguire il comando cURL seguente per rendere accessibile il valore del token di accesso tramite una variabile UNIX denominata AccessTokenValue nell'ambiente in uso:
       export AccessTokenValue=`curl -i
       -H "Authorization: Basic <base64encoded clientid:secret>"
       -H "Content-Type: application/x-www-form-urlencoded;charset=UTF-8"
       --request POST https://<domainURL>/oauth2/v1/token
       -d "grant_type=client_credentials&scope=urn:opc:idm:__myscopes__" | awk -F"\"" '{print $4}' |  tail -n +16`
    È quindi possibile eseguire il comando echo $AccessTokenValue per ottenere il valore del token di accesso.
    Testo tra parentesi Valore
    ID client base64encoded:segreto Sostituire con le credenziali codificate generate nella sezione Base64 Codificare l'ID client e il segreto client. Assicurarsi che non vi siano spazi nelle credenziali clientid:clientsecret.
    IDCS_Service_Instance Sostituire con l'URL del dominio di Identity (ad esempio, https://<domainURL>/).)
    Nota

    L'ambito urn:opc:idm:__myscopes__ del comando viene utilizzato come tag dai client del dominio di Identity che richiedono i token di accesso dal server di autorizzazione OAuth. Vengono restituiti i token di accesso che contengono tutti gli ambiti dei domini di Identity applicabili in base ai privilegi rappresentati dai ruoli di amministratore dei domini di Identity concessi al client richiedente e all'utente specificato dalla richiesta del client (se presente). Questo ambito non viene concesso direttamente ad alcun ruolo di amministratore dei domini di Identity.
  3. Copiare il valore access_token dalla risposta. Assicurarsi di copiare solo il token effettivo, ovvero il valore access_token tra le virgolette:

    Status: 200
    "access_token":"eyJ4NXQiOiI4Wk. . ."
    "token":"Bearer",
    "expires_in":3600
    
    Nota

    La risposta include il parametro expires_in: 3600. Ciò significa che il token non è più valido dopo un'ora dal momento in cui lo si genera. Dopo un'ora, è necessario aggiornare il token o ottenere un nuovo token di accesso. Per aggiornare il token, immettere il comando cURL riportato di seguito, sostituendo il testo tra parentesi ( < > ) con i valori appropriati:
    curl -i
      -H "Authorization: Basic <base64 encoded client ID and secret>"
      -H "Content-Type: application/x-www-form-urlencoded;charset=UTF-8"
      --request POST https://<domainURL>/oauth2/v1/token
      -d "grant_type=refresh_token&refresh_token=<token_value>"

Passo 4: effettuare una richiesta REST all'ambiente

Dopo aver ottenuto il token di accesso OAuth 2.0, è possibile utilizzare il token in un comando cURL per inviare una richiesta REST all'API REST dei domini di Identity. Il comando seguente restituisce un elenco di utenti in un dominio di Identity.

   curl -X GET
   -H "Content-Type:application/scim+json"
   -H "Authorization: Bearer <access_token>"
   https://<domainURL>/admin/v1/Users
Elemento Valore
Metodo -X OTTIENI
Intestazione tipo di contenuto -H "Tipo di contenuto: applicazione/scim-json"
Intestazione autorizzazione -H "Autorizzazione: Portatore <access_token>"
Protocollo HTTP HTTP o HTTPS (si consiglia l'HTTP)
Dominio di Identity URL del dominio di Identity (ad esempio, https://<domainURL>).)
Endpoint REST dei domini di Identity /admin/v1/Users

Output JSON di esempio dall'API REST dei domini di Identity

Nel passo precedente, la richiesta REST inviata utilizzando cURL ha restituito una risposta in formato JSON. JSON è uno standard aperto che può essere formattato o analizzato in base alle proprie esigenze, ad esempio ottenendo attributi specifici richiesti dall'applicazione.

{
  "schemas": [
    "urn:scim:api:messages:2.0:ListResponse"
  ],
  "totalResults": 1,
  "Resources": [
    {
      "displayName": "admin opc",
      "name": {
        "givenName": "admin",
        "formatted": "admin opc",
        "familyName": "opc"
      },
      "urn:ietf:params:scim:schemas:oracle:idcs:extension:userState:User": {
        "locked": {
          "on": false
        }
      },
      "userName": "admin@example.com",
      "id": "d252a54d83c344eb8f59f7053a0562ce",
      "urn:ietf:params:scim:schemas:oracle:idcs:extension:user:User": {
        "isFederatedUser": false
      },
      "active": true,
      "nickName": "TAS_TENANT_ADMIN_USER",
      "emails": [
        {
          "verified": false,
          "value": "admin@example.com",
          "type": "work",
          "primary": true
        },
        {
          "verified": false,
          "value": "admin@example.com",
          "primary": false,
          "type": "recovery"
        }
      ],
      "schemas": [
        "urn:ietf:params:scim:schemas:oracle:idcs:extension:user:User",
        "urn:ietf:params:scim:schemas:oracle:idcs:extension:userState:User",
        "urn:ietf:params:scim:schemas:core:2.0:User"
      ],
      "meta": {
        "resourceType": "User",
        "created": "2022-07-22T18:11:08Z",
        "lastModified": "2022-07-25T21:19:28Z",
        "location": "https://<domainURL>admin/v1/Users/d252a54d83c344eb8f59f7053a0562ce"
      },
      "idcsLastModifiedBy": {
        "value": "idcssso",
        "$ref": "https://<domainURL>admin/v1/Apps/idcssso",
        "type": "App",
        "display": "idcssso"
      }
    }
  ],
  "startIndex": 1,
  "itemsPerPage": 50
}