Utilizzo di OAuth 2 per accedere all'API REST

L'API REST dei domini di Identity supporta gli endpoint conformi a SCIM 2.0 con schemi core SCIM 2.0 standard e le estensioni di schema 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. Nella tabella seguente vengono descritti i parametri più comuni.

Parametro Value commenti

Intestazione Autorizzazione

<base64_clientid_secret> di base

Utilizzato dal client come schema di autenticazione Basic per trasmettere il token di accesso in un'intestazione. Il valore del token di accesso deve essere un valore con codifica base64 UTF-8 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 autorizzazione

client_credentials

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

Ambito (obbligatorio)

urna:opc:idm:__myscopes__

Questo ambito restituisce tutte le sovvenzioni concesse all'applicazione. Se necessario, è possibile utilizzare altri ambiti per ottenere sovvenzioni specifiche.

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

Quando si registra un'applicazione riservata nella console del dominio di Identity, si ottengono alcuni dei parametri chiave necessari per l'utilizzo con 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 ambiti. Nell'esempio seguente vengono aggiunti gli ambiti richiesti per richiedere ricerche, modifiche, creazione ed eliminazioni dell'utente. Tuttavia, se dovessi fare altre cose, ad esempio gestire gli eventi di audit, ciò richiederebbe altri ambiti.

Per creare e registrare un'applicazione riservata, accedere a OCI Console e 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, Quindi fare 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 il nome e la descrizione dell'applicazione, quindi selezionare Successivo.
  6. Nella pagina Configura OAuth, in Configurazione client, selezionare Configura questa applicazione come client ora.
  7. In Autorizzazione, selezionare solo Credenziali client come Tipo di autorizzazione 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 l'ID client e il segreto client e archiviarli in un luogo sicuro.
  12. Dopo la creazione dell'applicazione, selezionare Attiva.

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

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

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

Finestre

  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 l'attributo clientid:clientsecret non contenga spazi.
  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 Prompt 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 quindi chiudere il file.
    Nota

    Al termine, eliminare i file appCreds.txt e appbase64Creds.txt per motivi di sicurezza.

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 è 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 del testo.

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 Bearer. 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 Value
    base64encoded clientid:segreto Sostituire con le credenziali codificate generate nella sezione Base64 Codifica l'ID client e il segreto client. Assicurarsi che non vi siano spazi nelle credenziali clientid:clientsecret.
    IDCS_Service_Instance Sostituisci con l'URL del dominio di Identity (ad esempio, https://<domainURL>/).)
    Nota

    L'ambito urn:opc:idm:__myscopes__ nel comando viene utilizzato come tag dai client del dominio di Identity che richiedono i token di accesso dal server di autorizzazione OAuth. Vengono restituiti 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 dalla generazione. 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 quadre ( < > ) 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: inoltrare 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 identità. Il comando seguente restituisce una lista 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 Value
Metodo -X OTTIENI
Intestazione tipo di contenuto -H "Content-Type:application/scim-json"
Intestazione Autorizzazione -H "Autorizzazione: portatore <access_token>"
Protocollo HTTP HTTP o HTTPS (HTTP è consigliato)
Dominio di Identity L'URL del dominio di Identity, ad esempio https://<domainURL>).
Endpoint REST 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 tue 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
}