Ambiti
Utilizzando il parametro di ambito, il token di accesso può concedere diversi livelli di accesso a più API del dominio di Identity IAM.
Gli ambiti consentono di definire in modo più specifico un set di risorse e operazioni consentite da un token di accesso. Gli ambiti rappresentano l'intento. Quando un client richiede il token d'accesso, gli ambiti chiesti indicano il tipo di funzionalità da utilizzare durante la presentazione del token d'accesso.
Inoltre, diversi tipi di applicazioni utilizzano privilegi di token di accesso diversi. Le applicazioni sicure (ad esempio i servizi backend) possono richiedere i token di accesso direttamente per conto degli utenti. Le applicazioni Web in genere devono prima convalidare l'identità dell'utente e, facoltativamente, ottenere il consenso dell'utente.
Utilizzare l'ambito urn:opc:idm:__myscopes__ quando è necessario ottenere un token di accesso contenente tutti gli ambiti del dominio di Identity consentiti. Vengono restituiti i token di accesso che contengono tutti gli ambiti del dominio di Identity applicabili in base ai privilegi rappresentati dai ruoli applicazione del dominio 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 del dominio di Identity.
Utilizzare l'ambito urn:opc:idm:role.<r_name> (ad esempio, urn:opc:idm:role.User%20Administrator) quando è necessario ottenere un token di accesso contenente gli ambiti applicabili di un ruolo specifico, a condizione che sia al client che all'utente venga concesso il ruolo specifico. Ad esempio, per richiedere un token di accesso con un ambito basato sui ruoli di amministratore utente e amministratore dell'applicazione:
Esempio di richiesta
curl -i
-H 'Content-Type: application/x-www-form-urlencoded;charset=UTF-8'
--request POST https://<domainURL>/oauth2/v1/token
-d 'grant_type=password&username=<user-name>&password=<example-password>&client_id=<client-id>&client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer&client_assertion=<client-assertion>&scope=urn:opc:idm:role.User%2520Administrator urn:opc:idm:role.Application%2520Administrator'
Il token di accesso generato conterrebbe gli ambiti applicabili per l'amministratore utente e l'amministratore dell'applicazione, a condizione che questi ruoli vengano concessi sia al client che all'utente. Ad esempio, un client dispone di Role1, Role2 e Role3. Un utente dispone di Role1, Role2 e ruolo 4. Gli ambiti inclusi nella richiesta per il token di accesso sono Role1 e Role3. Il token di accesso generato conterrà solo ambiti per Role1.
Le richieste di scope possono avere più ambiti separati da spazi. Se un nome ambito contiene uno spazio, il server non può determinare il limite di ambito corretto. Ciò può verificarsi quando nell'ambito viene utilizzato un nome ruolo. Nell'esempio di richiesta, i ruoli "amministratore utente" e "amministratore applicazione" dispongono di spazi con codifica URL: scope=urn:opc:idm:role.User%2520Administrator urn:opc:idm:role.Application%2520Administrator.
Per evitare problemi di spazio nei nomi dei ruoli, è necessario codificare due volte i nomi dei ruoli utilizzando la codifica URL:
Codice Java di esempio
String scope = "scope=urn:opc:idm:role." + URLEncoder.encode(URLEncoder.encode("User Administrator", "UTF-8"), "UTF-8");
scope = scope + " urn:opc:idm:role." + URLEncoder.encode(URLEncoder.encode("Application Administrator", "UTF-8"), "UTF-8");
Nessun ambito definito per un'applicazione
/oauth2/v1/authorize:scope=openid: il token di accesso risultante può essere utilizzato con/oauth2/c1/userinfo, che fornisce le informazioni utente minime nude.scope=openid approles groups: il token di accesso risultante può essere utilizzato con/oauth2/v1/userinfoper ottenere i ruoli e i gruppi dell'utente.
Utilizzo di ambiti sicuri
Gli ambiti sicuri definiscono il modo in cui un client OAuth accede alle risorse. Gli ambiti di attendibilità consentono a un'applicazione client sicura o riservata di acquisire un token di accesso che consente di accedere a qualsiasi risorsa all'interno di un dominio di Identity (Account), ad altre risorse basate su tag definite (Tags) o solo a quei servizi in cui esiste un'associazione esplicita tra il client e il servizio (Explicit).
L'opzione per definire il parametro
trustScope è disponibile solo per le applicazioni client sicure e riservate. Opzione non disponibile per le applicazioni client pubbliche.The
trustScope attributes of Account, Tags, and Explicit are named All (for Account), Tagged (for Tags), and Specific (for Explicit) in the identity domain Console.-
Utilizzare solo l'ambito
urn:opc:resource:consumer::allnella richiesta. Viene restituito un errore di ambito non valido se si tenta di includere sia l'ambitourn:opc:resource:consumer::allche un altro ambito nella stessa richiesta, ad esempiourn:opc:idm:__myscopes__. -
La richiesta di un token di accesso che utilizza l'ambito
urn:opc:resource:consumer::allnon restituisce un token di accesso che fornisce l'accesso alle API di amministrazione dei domini di Identity. È necessario continuare a utilizzare l'ambito:urn:opc:idm:__myscopes__per accedere alle API di amministrazione. Vedere Scopi. -
L'ambito richiesto dall'applicazione Client deve sempre esistere e corrispondere, direttamente o gerarchicamente, agli ambiti consentiti definiti dal client per consentire al client di accedere alla risorsa.
-
Il valore
trustScopediExplicitviene assegnato per impostazione predefinita alle applicazioni client sicure e riservate e consente all'applicazione client di acquisire un token di accesso con autorizzazioni basate su un'associazione esplicita tra il client e i servizi di destinazione. Per utilizzare l'opzioneAlloTagged, è necessario aggiornare l'applicazione client con il valoretrustScopeAlloTags. - Per le richieste di token di propagazione delle identità che utilizzano l'ambito
urn:opc:resource:consumer::all, il token di accesso risultante non include l'ambitourn:opc:resource:consumer::all.
I seguenti link forniscono ulteriori informazioni su ogni trustScope disponibile:
Utilizzo dell'ambito di attendibilità del conto
L'ambito sicuro Account consente a un'applicazione client sicura o riservata di ottenere un token di accesso che fornisce l'accesso a qualsiasi servizio che si trova nello stesso dominio di Identity senza richiedere l'associazione esplicita con i servizi di destinazione.
L'opzione per definire il parametro
trustScope è disponibile solo per le applicazioni client sicure e riservate. Opzione non disponibile per le applicazioni client pubbliche.Per utilizzare l'ambito sicuro Account:
-
Assegnare il valore
Accountal parametrotrustScopeper l'applicazione client sicura appropriata.Nota
L'attributotrustScopediAccountè denominato Tutto nella console del dominio di Identity.
-
Richiedere un token di accesso utilizzando il client sicuro o riservato e richiedere l'ambito
urn:opc:resource:consumer::all.Il token di accesso nella risposta contiene l'audienceurn:opc:resource:scope:accounte l'ambitourn:opc:resource:consumer::all, che consente di accedere a uno qualsiasi dei servizi che si trovano nello stesso dominio senza richiedere un'associazione esplicita con i servizi di destinazione.
L'ambito richiesto deve sempre esistere e corrispondere, direttamente o gerarchicamente, agli ambiti consentiti definiti dal client per consentire al client di accedere alla risorsa.
Utilizzo di ambiti con filtro
urn:opc:resource:consumer::all, è anche possibile specificare i seguenti ambiti con filtro:urn:opc:resource:consumer:paas::readurn:opc:resource:consumer:paas:stack::allurn:opc:resource:consumer:paas:analytics::read
urn:opc:resource:consumer:paas:analytics::read nella richiesta di accesso a una risorsa. Se l'ambito corrisponde direttamente a un ambito consentito definito, nel token di accesso restituito, l'audience è urn:opc:resource:scope:account e l'ambito è urn:opc:resource:consumer:paas:analytics::read.Se l'ambito consentito definito dal client è urn:opc:resource:consumer:paas::read, l'applicazione client può accedere alla risorsa in modo gerarchico se il client richiede uno dei seguenti ambiti: urn:opc:resource:consumer:paas::read o urn:opc:resource:consumer:paas:analytics::read. Tuttavia, se l'ambito richiesto è urn:opc:resource:consumer:paas:analytics::write,, al client non è consentito l'accesso alla risorsa, poiché non è uno degli ambiti consentiti definiti dall'applicazione client.
Esempi di richieste e risposte
Gli esempi riportati di seguito mostrano gli esempi di richiesta e risposta per le credenziali client e i flussi di concessione del proprietario della risorsa.
Esempio di richiesta di flusso credenziali client
curl -i
-H 'Authorization: Basic TXlUZXN0U2VydmljZV9BUFBJRDoxMGE2ODAwMC03YTYzLTQxNDItODE0Ny03MGNmMGJhMDFkYjg='
-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:resource:consumer::all' -k
Esempio di risposta
{
"access_token":"eyJ4NX....Zh3ieBlQ",
"token_type":"Bearer",
"expires_in":3600
}
Il token di accesso contiene i destinatari
urn:opc:resource:scope:account e l'ambito urn:opc:resource:consumer::all.Esempio di richiesta di flusso proprietario risorsa
curl -i
-H 'Authorization: Basic TXlUZXN0U2VydmljZV9BUFBJRDoxMGE2ODAwMC03YTYzLTQxNDItODE0Ny03MGNmMGJhMDFkYjg='
-H 'Content-Type: application/x-www-form-urlencoded; charset=utf-8'
--request POST https://<domainURL>/oauth2/v1/token'
-d 'grant_type=password&scope=urn:opc:resource:consumer::all&username=admin@example.com&password=PasswordExample1'-k
Esempio di risposta
{
"access_token":"eyJ4NX...71aImeBsU",
"token_type":"Bearer",
"expires_in":3600
}
Esempi di richieste e risposte mediante un ambito completamente qualificato
Gli esempi riportati di seguito mostrano esempi di richieste e risposte che utilizzano un ambito completamente qualificato.
Esempio di richiesta
curl -i
-H 'Authorization: Basic TXlUZXN0U2VydmljZV9BUFBJRDoxMGE2ODAwMC03YTYzLTQxNDItODE0Ny03MGNmMGJhMDFkYjg='
-H 'Content-Type: application/x-www-form-urlencoded; charset=utf-8'
--request POST 'https://<domainURL>/oauth2/v1/token'
-d 'grant_type=client_credentials&scope=http://abccorp1.com/scope1'
Esempio di risposta
{
"access_token":"eyJ4NXzF.....rT5SH7sUw",
"token_type":"Bearer",
"expires_in":3600
}
Esempio di richiesta di flusso proprietario risorsa che include la richiesta di un token di aggiornamento
Per generare un token di aggiornamento oltre al token di accesso, utilizzare l'ambito urn:opc:resource:consumer::all offline_access nella richiesta.
curl -i
-H 'Authorization: Basic TXlUZXN0U2VydmljZV9BUFBJRDoxMGE2ODAwMC03YTYzLTQxNDItODE0Ny03MGNmMGJhMDFkYjg='
-H 'Content-Type: application/x-www-form-urlencoded; charset=utf-8'
--request POST https://<domainURL>/oauth2/v1/token'
-d 'grant_type=password&scope=urn:opc:resource:consumer::all offline_access&username=admin@example.com&password=PasswordExample1'-k
Esempio di risposta
{
"access_token":"eyJ4...pNYM0M",
"token_type":"Bearer",
"expires_in":3600,
"refresh_token":"AQIDBAUi....djF9NCA="
}
Utilizzo dell'ambito di attendibilità tag
L'ambito sicuro Tags consente a un'applicazione client sicura o riservata di ottenere un token di accesso che fornisce l'accesso ad altre risorse in base alle tag definite.
L'opzione per definire il parametro
trustScope è disponibile solo per le applicazioni client sicure e riservate. Opzione non disponibile per le applicazioni client pubbliche.Per utilizzare l'ambito sicuro Tags:
-
Assegnare il valore
Tagsal parametrotrustScopeper consentire all'applicazione client di accedere alle tag da altre applicazioni.Nota
L'attributotrustScopediTagsè denominato Contrassegnato nella console del dominio di Identity. -
Definire la coppia
key:valueper il parametroAllowedTags.Nota
Questi passi presuppongono che l'applicazione risorsa appropriata abbia definito coppiekey:valueper l'attributoTagse che almeno una coppiakey:valuedell'elenco dell'attributoallowedTagsdell'applicazione client corrisponda a una coppiakey:valuedell'attributoTagsdell'applicazione risorsa.
-
Richiedere un token di accesso utilizzando il client sicuro o riservato e richiedere l'ambito
urn:opc:resource:consumer::all.Il token di accesso nella risposta contiene l'audienceurn:opc:resource:scope:tag=<base64 encoded JSON>e l'ambitourn:opc:resource:consumer::all, che consente di accedere alle applicazioni risorsa con tag corrispondenti alle tag consentite specificate nell'applicazione client.
L'ambito richiesto deve sempre esistere e corrispondere, direttamente o gerarchicamente, agli ambiti consentiti definiti dal client per consentire al client di accedere alla risorsa.
Utilizzo di ambiti con filtro
urn:opc:resource:consumer::all, è anche possibile specificare i seguenti ambiti con filtro:urn:opc:resource:consumer:paas::readurn:opc:resource:consumer:paas:stack::allurn:opc:resource:consumer:paas:analytics::read
urn:opc:resource:consumer:paas:analytics::read nella richiesta di accesso a una risorsa. Se l'ambito corrisponde direttamente a un ambito consentito definito, nel token di accesso restituito l'audience è urn:opc:resource:scope:tag=<base64 encoded JSON> e l'ambito è urn:opc:resource:consumer:paas:analytics::read.Se l'ambito consentito definito dal client è urn:opc:resource:consumer:paas::read, l'applicazione client può accedere alla risorsa in modo gerarchico se il client richiede uno dei seguenti ambiti: urn:opc:resource:consumer:paas::read o urn:opc:resource:consumer:paas:analytics::read. Tuttavia, se l'ambito richiesto è urn:opc:resource:consumer:paas:analytics::write,, al client non è consentito l'accesso alla risorsa, poiché non è uno degli ambiti consentiti definiti dall'applicazione client.
Esempi di richieste e risposte
Gli esempi riportati di seguito mostrano esempi di richiesta e risposta per il flusso di credenziali client utilizzando l'ambito urn:opc:resource:consumer::all.
Esempio di richiesta
curl -i
-H 'Authorization: Basic MjA3Mz....zllNjI2'
-H 'Content-Type: application/x-www-form-urlencoded; charset=utf-8'
--request POST 'https://tenant101.idcs.internal.oracle.com:8943/oauth2/v1/token'
-d 'grant_type=client_credentials&scope=urn:opc:resource:consumer::all'
Esempio di risposta
{
"access_token""eyJ4NX....ZbDtAw",
"token_type":"Bearer", "expires_in":3600
}
Il token di accesso contiene i destinatari
urn:opc:resource:scope:tag=<base64 encoded JSON> e l'ambito urn:opc:resource:consumer::all. Di seguito è riportato un esempio di audience decodificata: aud:["urn:opc:resource:scope:tag=eyAidGFncyI6WyB7ICJrZXkiOiJjb2xvciIsInZhbHVlIjoiZ3JlZW4ifSAsICB7ICJrZXkiOiJjb2xvciIsInZhbHVlIjoiYmx1ZSJ9IF19"]Gli esempi riportati di seguito mostrano esempi di richiesta e risposta per il flusso di credenziali client utilizzando un ambito completamente qualificato.
Esempio di richiesta
curl -i
-H 'Authorization: Basic MzRjYz....Q3OWVk'
-H 'Content-Type: application/x-www-form-urlencoded; charset=utf-8'
--request POST 'https://<domainURL>/oauth2/v1/token'
-d 'grant_type=client_credentials&scope=http://abccorp1.com/scope1'
Esempio di risposta
{
"access_token""eyJ4NXzF.....rT5SH7sUw",
"token_type":"Bearer",
"expires_in":3600
}
Utilizzo dell'ambito di fiducia esplicito
L'ambito attendibile Explicit definisce l'ambito attendibile solo per i servizi in cui esiste un'associazione esplicita tra il client e il servizio di destinazione.
L'opzione per definire il parametro
trustScope è disponibile solo per le applicazioni client sicure e riservate. Opzione non disponibile per le applicazioni client pubbliche.Non è necessario eseguire alcuna operazione per utilizzare l'ambito sicuro Explicit perché si tratta dell'impostazione predefinita assegnata all'applicazione client sicura e riservata. Per utilizzare l'opzione Account o Tags, è necessario aggiornare l'applicazione client con il valore trustScope Account o Tags.
L'attributo
trustScope di Explicit è denominato Specifico nel dominio di Identity.Vedere Uso dell'ambito sicuro del conto e Uso dell'ambito sicuro delle tag.
Esempi di richieste e risposte
Gli esempi di richiesta e risposta mostrano il flusso delle credenziali client utilizzando un ambito completamente qualificato.
Esempio di richiesta
curl -i
-H 'Authorization: Basic MzRjYz....Q3OWVk'
-H 'Content-Type: application/x-www-form-urlencoded; charset=utf-8'
--request POST 'https://<domainURL>/oauth2/v1/token'
-d 'grant_type=client_credentials&scope=http://abccorp1.com/scope1'
Esempio di risposta
{
"access_token""eyJ4NXzF.....rT5SH7sUw",
"token_type":"Bearer",
"expires_in":3600
}
Utilizzo degli ambiti di attendibilità espliciti di più risorse
L'ambito attendibile Explicit definisce l'ambito attendibile solo per i servizi in cui esiste un'associazione esplicita tra il client e il servizio di destinazione. È possibile specificare più ambiti appartenenti a risorse diverse in una singola richiesta di autorizzazione o richiesta di token e ottenere più token di accesso in cambio di ognuno di essi contenente gli ambiti per ogni risorsa.
- È necessario specificare l'ambito appena definito,
urn:opc:resource:multiresourcescopenella richiesta di autorizzazione o nella richiesta di token. Le richieste di token non riusciranno se vengono specificati più ambiti appartenenti a risorse diverse senza questo ambito. - Il client OAuth deve essere in grado di analizzare la risposta del token che include più token di accesso e utilizzare ogni token per accedere a ciascun servizio di risorse.
È possibile utilizzare questa funzione con tutti i tipi di sovvenzione ad eccezione del flusso implicito. Vedere Tipo di autorizzazione implicita.
Vedere Uso dell'ambito sicuro esplicito (specifico) per ulteriori informazioni sugli ambiti sicuri espliciti.
Esempi di richieste e risposte
Gli esempi di richiesta e risposta mostrano il flusso delle credenziali client utilizzando un ambito completamente qualificato.
Esempio di richiesta
https://<domainURL>/oauth2/v1/authorize?
client_id=<client-id>&
response_type=code&
redirect_uri=<redirect-url>&
scope=http://abccorp.com/scope1 http://123corp.com/scope1 openid urn:opc:resource:multiresourcescope
curl -i
-H 'Authorization: Basic MzgzZTU4Z….NTM3YjFm' \
--request POST 'https://<domainURL>/oauth2/v1/token' \
-d 'grant_type=authorization_code' \
-d 'code=AgAgYjc1MzgzNWM2NGQxNDA5…YcxU_XdtfLWXUp1Vn4a5uIHiOn4='
curl -i
-H 'Authorization: Basic MzgzZTU4Z….NTM3YjFm' \
--request POST 'https://<domainURL>/oauth2/v1/token' \
-d 'grant_type=client_credentials' \
-d 'scope=http://abccorp.com/scope1 http://123corp.com/scope1 urn:opc:resource:multiresourcescope
Esempio di risposta
{
"tokenResponses":[
{
"access_token": "eyJ4NXQjUzI1NiI6InZBV3RzNEo1clE1Z.....1iZDc2NjFjMWJiZjA0OGNhOTkyMWNlN2Q4MThkNDY0YSIsImp0aSI6Ijg53ZFOT2FxyZYjocCnm1b1w",
"token_type": "Bearer",
"expires_in": 3600
},
{
"access_token": "eyJ4NXQjUzI1NiI6InZBV3RzNEo1clE1Z.....HplcmtUNjdsU19SjZlYjc5ZDgzMTVhYjQ0ODBiNDlkMjU3NzdkZWMzMDE2In0.k4QShMbO5aPGmYyKo",
"token_type": "Bearer",
"expires_in": 3000
}
],
"id_token": "eyJ4NXQjUzI1NiI6InZBV3RzNEo1clE1ZHplc.....mtUNjdsU19SYjhQTWoYDSVhTUmDl8zK3a9vk7cowIW2hr3smwtcsvfsbrewwtbnCrGerp7v4CUcVYlSw"
}