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

Se non sono stati definiti ambiti per un'applicazione (ad esempio, se si desidera che l'utente si colleghi e acquisisca un token di accesso OAuth), è possibile specificare gli ambiti riportati di seguito nelle richieste del flusso di login basato su browser all'endpoint /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).

Nota

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.
Utilizzare le linee guida riportate di seguito quando si utilizza un ambito sicuro.
Note

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'ambito urn:opc:resource:consumer::all che un altro ambito nella stessa richiesta, ad esempio urn: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 di Explicit 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 opzioni All o Tagged, è necessario aggiornare l'applicazione client con il valore trustScope All o Tags.

  • 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'ambito urn: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.

Nota

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:

  1. Assegnare il valore di Account al parametro trustScope per l'applicazione client sicura appropriata.

    Nota

    L'attributo trustScope di Account è denominato Tutto nella console del dominio di Identity.

    Parte di una richiesta di esempio con una freccia rossa che punta al parametro trustScope.

  2. 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'audience urn:opc:resource:scope:account e l'ambito urn: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.

Nota

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

Oltre a utilizzare l'ambito 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

L'ambito richiesto dall'applicazione client deve corrispondere, direttamente o gerarchicamente, ad almeno uno degli ambiti consentiti del client per consentire al client di accedere alla risorsa. Ad esempio, un'applicazione client utilizza l'ambito 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
}
Nota

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.

Nota

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:

  1. Assegnare il valore di Tags al parametro trustScope per consentire all'applicazione client di accedere alle tag da altre applicazioni.

    Nota

    L'attributo trustScope di Tags è denominato Taggato nella console del dominio di Identity.
  2. Definire la coppia key:value per il parametro AllowedTags.

    Nota

    Questi passi presuppongono che l'applicazione risorse appropriata abbia definito coppie key:value per l'attributo Tags e che almeno una coppia key:value dell'elenco dell'attributo allowedTags dell'applicazione client corrisponda a una coppia key:value dell'attributo Tags dell'applicazione risorsa.

    Parte di una richiesta di esempio con frecce rosse che puntano al parametro trustScope e al parametro allowedTags.

  3. 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'audience urn:opc:resource:scope:tag=<base64 encoded JSON> e l'ambito urn:opc:resource:consumer::all, che consente di accedere alle applicazioni risorsa con tag corrispondenti alle tag consentite specificate nell'applicazione client.

Nota

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

Oltre a utilizzare l'ambito 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

L'ambito richiesto dall'applicazione client deve corrispondere, direttamente o gerarchicamente, ad almeno uno degli ambiti consentiti del client per consentire al client di accedere alla risorsa. Ad esempio, un'applicazione client utilizza l'ambito 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
}
Nota

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.

Nota

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.

Nota

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.

Per utilizzare questa funzione, effettuare le operazioni riportate di seguito.
  • È 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.
Nota

È 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" 
}