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.

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.
- Aprire il menu di navigazione e selezionare Identità e sicurezza. In Identità, selezionare Domini.
- 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.
- Selezionare Aggiungi applicazione.
- Nella finestra di dialogo Aggiungi applicazione, selezionare Applicazione riservata, quindi selezionare Avvia workflow.
- Nella pagina Aggiungi dettagli applicazione, immettere un nome e una descrizione per l'applicazione, quindi selezionare Successivo.
- Nella pagina Configure OAuth, in Configurazione client, selezionare Configure this application as a client now.
- In Autorizzazione, selezionare solo Credenziali client come Tipo di privilegio consentito.
- Nella parte inferiore della pagina selezionare Aggiungi ruoli applicazione, quindi selezionare Aggiungi ruoli.
- Nel pannello Aggiungi ruoli applicazione, selezionare Amministratore dominio di Identity, quindi selezionare Aggiungi.
- Selezionare Avanti e quindi Fine.
- 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.
- Dopo aver creato l'applicazione, selezionare Attiva.
Passo 2: Base64 Codificare l'ID client e il segreto client
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.
Windows
-
Avviare Blocco note, quindi incollare l'ID client e il segreto client in Blocco note.
-
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. -
Salvare il file in
C:\temp
e assegnare un nome al fileappCreds.txt.
-
In Esplora risorse, fare clic con il pulsante destro del mouse su
C:\temp
, quindi selezionare Richiesta CMD qui dal menu di scelta rapida. -
Immettere il comando seguente per codificare l'ID client e il segreto client:
certutil -encode appCreds.txt appbase64Creds.txt
-
In Blocco note aprire
C:\temp\appbase64Creds.txt
, copiarne il contenuto e chiudere il file.Nota
Per motivi di sicurezza, eliminare i fileappCreds.txt
eappbase64Creds.txt
al termine delle operazioni.
Mac e Linux
-
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.
Posizionare l'ID client e il segreto client sulla stessa riga e inserire i due punti tra di essi:
clientid:clientsecret.
Notaistruzione.
Assicurarsi che non vi siano spazi nel file clientid:clientsecret.-
Copiare la riga
clientid:clientsecret
. -
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. -
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.
-
Avviare un prompt dei comandi.
-
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 denominataAccessTokenValue
nell'ambiente in uso:
È quindi possibile eseguire il comandoexport 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`
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'ambitourn: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. -
Copiare il valore
access_token
dalla risposta. Assicurarsi di copiare solo il token effettivo, ovvero il valoreaccess_token
tra le virgolette:Status: 200 "access_token":"eyJ4NXQiOiI4Wk. . ." "token":"Bearer", "expires_in":3600
Nota
La risposta include il parametroexpires_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
}