Ambiti
Utilizzando il parametro scope, 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 un token di accesso, gli ambiti richiesti indicano il tipo di funzionalità che un client desidera utilizzare durante la visualizzazione del token di accesso.
Inoltre, diversi tipi di applicazioni utilizzano autorizzazioni token di accesso diverse. Le applicazioni attendibili (come 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 è 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 siano 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 conterrebbe solo ambiti per Role1.
Le richieste di scope possono avere più ambiti separati da spazi. Se un nome di ambito contiene uno spazio, il server non è in grado di determinare il limite di ambito corretto. Ciò può verificarsi quando si utilizza un nome di ruolo nell'ambito. Nell'esempio della richiesta, i ruoli "amministratore utente" e "amministratore dell'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.scope=openid approles groups
: il token di accesso risultante può essere utilizzato con/oauth2/v1/userinfo
per ottenere i ruoli e i gruppi dell'utente.
Utilizzo degli ambiti sicuri
Gli ambiti sicuri definiscono il modo in cui un client OAuth accede alle risorse. Gli ambiti sicuri 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 ai 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. L'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::all
nella richiesta. Viene restituito un errore di ambito non valido se si tenta di includere sia l'ambitourn:opc:resource:consumer::all
che un altro ambito nella stessa richiesta, ad esempiourn:opc:idm:__myscopes__.
-
La richiesta di un token di accesso utilizzando l'ambito
urn:opc:resource:consumer::all
non restituisce un token di accesso che fornisce l'accesso alle API di amministrazione dei domini di Identity. Per accedere alle API di amministrazione, è necessario continuare a utilizzare l'ambito:urn:opc:idm:__myscopes__
. Vedere Scope. -
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
trustScope
diExplicit
viene 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 le opzioniAll
oTagged
, è necessario aggiornare l'applicazione client con il valoretrustScope
All
oTags.
- 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 collegamenti forniscono ulteriori informazioni su ogni trustScope
disponibile:
Utilizzo dell'ambito fiduciario account
L'ambito trust Account
consente a un'applicazione client sicura o riservata di ottenere un token di accesso che consente l'accesso a qualsiasi servizio che si trova nello stesso dominio di Identity senza richiedere un'associazione esplicita con i servizi di destinazione.
L'opzione per definire il parametro
trustScope
è disponibile solo per le applicazioni client sicure e riservate. L'opzione non è disponibile per le applicazioni client pubbliche.Per utilizzare l'ambito di attendibilità Account
:
-
Assegnare il valore di
Account
al parametrotrustScope
per l'applicazione client sicura appropriata.Nota
L'attributotrustScope
diAccount
è 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:account
e l'ambitourn:opc:resource:consumer::all
, che consente di accedere a qualsiasi servizio che si trova 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.
Uso di ambiti con filtro
urn:opc:resource:consumer::all
, è possibile specificare i seguenti ambiti con filtro:urn:opc:resource:consumer:paas::read
urn:opc:resource:consumer:paas:stack::all
urn: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 degli ambiti seguenti: 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 le credenziali client e i flussi di concessione del proprietario della risorsa.
Esempio di richiesta di flusso delle 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 l'audience
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 che utilizzano 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 del proprietario della 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 sicuro tag
L'ambito sicuro Tags
consente a un'applicazione client sicura o riservata di ottenere un token di accesso che consente di accedere ad altre risorse in base alle tag definite.
L'opzione per definire il parametro
trustScope
è disponibile solo per le applicazioni client sicure e riservate. L'opzione non è disponibile per le applicazioni client pubbliche.Per utilizzare l'ambito di attendibilità Tags
:
-
Assegnare il valore di
Tags
al parametrotrustScope
per consentire all'applicazione client di accedere alle tag da altre applicazioni.Nota
L'attributotrustScope
diTags
è denominato Taggato nella console del dominio di Identity. -
Definire la coppia
key:value
per il parametroAllowedTags
.Nota
Questi passi presuppongono che l'applicazione risorse appropriata abbia definito coppiekey:value
per l'attributoTags
e che almeno una coppiakey:value
dell'elenco dell'attributoallowedTags
dell'applicazione client corrisponda a una coppiakey:value
dell'attributoTags
dell'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.
Uso di ambiti con filtro
urn:opc:resource:consumer::all
, è possibile specificare i seguenti ambiti con filtro:urn:opc:resource:consumer:paas::read
urn:opc:resource:consumer:paas:stack::all
urn: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 degli ambiti seguenti: 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 che utilizza 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 l'audience
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 che utilizza 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 sicuro esplicito
L'ambito trust Explicit
definisce l'ambito trust 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. L'opzione non è disponibile per le applicazioni client pubbliche.Non è necessario eseguire alcuna operazione per utilizzare l'ambito sicuro Explicit
poiché si tratta dell'ambito predefinito assegnato all'applicazione client sicura e riservata. Per utilizzare le opzioni Account
o Tags
, è necessario aggiornare l'applicazione client con il valore trustScope
di Account
o Tags.
L'attributo
trustScope
di Explicit
è denominato Specifico nel dominio di Identity.Vedere Utilizzo dell'ambito sicuro del conto e Utilizzo dell'ambito sicuro delle tag.
Esempi di richieste e risposte
Gli esempi di richiesta e risposta mostrano 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 degli ambiti sicuri espliciti da più risorse
L'ambito trust Explicit
definisce l'ambito trust 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 dei quali contenente gli ambiti per ogni risorsa.
- È necessario specificare l'ambito appena definito,
urn:opc:resource:multiresourcescope
, nella 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 privilegio ad eccezione del flusso Implicito. Vedere Tipo di privilegio implicito.
Per ulteriori informazioni sugli ambiti sicuri espliciti, vedere Utilizzo dell'ambito sicuro esplicito (specifico).
Esempi di richieste e risposte
Gli esempi di richiesta e risposta mostrano il flusso di 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"
}