Tipo di concessione scambio token: scambio di un token Web JSON per un UPST
Lo scambio di token da JWT a UPST consente alle identità federate (utenti o applicazioni autenticate utilizzando IDCS o un altro provider di identità) di accedere in modo sicuro ai servizi OCI (OCI Control Plane) senza gestire gli utenti nativi OCI o le chiavi API.
- JWT (JSON Web Token): emesso da un IdP affidabile, ad esempio provider di identità esterni o nativi OCI (IdPs), contiene richieste firmate relative all'utente o al servizio.
- UPST (User Principal Security Token): token OCI di breve durata accettato come autenticazione per l'accesso alle API.
- L'endpoint di scambio token convalida il JWT, estrae le richieste ed emette un UPST di breve durata.
Ciò consente agli utenti autenticati utilizzando IdPs esterno, ad esempio Okta, Microsoft Entra ID e altri, o OCI IdP stesso, di ottenere l'accesso alle risorse OCI.
Durata | Descrizione |
---|---|
API servizio scambio token IAM | Servizio OAuth del dominio di Identity IAM: /oauth2/v1/token . L'API accetta sia intestazioni/payload di autenticazione basati su OAuth standard che firme OCI. Per informazioni su come utilizzare un client OAuth con un dominio di Identity per accedere alle API REST, vedere Uso di OAuth 2 per accedere all'API REST. |
Configurazione sicura propagazione identità | Utilizza le configurazioni Trust di propagazione delle identità per abilitare la propagazione sicura delle identità end-to-end da un provider di identità esterno (IdP) a Oracle Cloud Infrastructure (OCI). Questo meccanismo consente a OCI Identity di convalidare il token dell'IdP esterno e di stabilire un mapping sicuro tra l'identità dell'utente esterno e un utente o un principal servizio IAM in OCI. Con l'invio del contesto di sicurezza dell'utente autenticato dal frontend (ad esempio, un IdP esterno) ai servizi backend in OCI, la propagazione delle identità elimina la necessità di account generici o con privilegi. Migliora la sicurezza, abilita l'audit dettagliato delle chiamate API e supporta scenari di autenticazione avanzati. L'endpoint API |
Utente servizio | Un utente senza privilegi di accesso interattivo. Gli utenti del servizio possono essere concessi a gruppi e ruoli di servizio. Le applicazioni possono utilizzare gli utenti del servizio o gli utenti che hanno eseguito il login possono rappresentarli per ottenere un UPST temporaneo. L'uso di un utente del servizio è facoltativo. Per ulteriori informazioni sull'uso degli utenti del servizio, vedere Passo 3: (facoltativo) uso di un utente del servizio. |
Token sessione principal utente (UPST) | Token generato da IAM OCI che può essere utilizzato per accedere ai servizi OCI (OCI Control Plane). Un UPST è noto anche come token di sicurezza quando lo si utilizza con SDK o Terraform. Rappresenta il principal utente del servizio autenticato. |
Flusso

Dichiarazione di non responsabilità: tutti i nomi dei prodotti, i logo, i marchi e i loghi sono marchi dei rispettivi proprietari e vengono utilizzati qui solo a scopo informativo.
Passi di scambio token JWT-UPST
Per scambiare un token JWT con un UPST, attenersi alla procedura riportata di seguito.
- Step1: (facoltativo) creazione di un dominio di Identity
- Passo 2: creare le applicazioni del dominio di Identity
- Passo 3: (facoltativo) utilizzare un utente del servizio
- Passo 4: creare una configurazione sicura per la propagazione delle identità
- Passaggio 5: generazione di una chiave pubblica
- Passo 6: Genera un token JWT per lo scambio con UPST
- Passo 7: ottieni OCI UPST
Step1: (facoltativo) creazione di un dominio di Identity
Creare un nuovo dominio di Identity se non esiste. Vedere Creazione di un dominio di Identity.
Passo 2: creare le applicazioni del dominio di Identity
Un client OAuth è un'applicazione sicura registrata con Identity Cloud Service per autenticare e ottenere i token di accesso utilizzando i flussi OAuth 2.0. Il client è utilizzato per:
-
Ottenere un token di accesso per chiamare le API di amministrazione IDCS.
-
Federare l'identità dell'applicazione per scambiare JWT con UPST.
Vedere Aggiunta di un'applicazione riservata. Dopo aver creato l'applicazione, salvare i valori di ID client e segreto client in una posizione sicura. Il principio di privilegio minimo è richiesto da due applicazioni del dominio di Identity (PoLP):
- Applicazione con ruolo di amministratore del dominio di Identity (IDA). Si utilizza un token di accesso generato utilizzando questa applicazione per eseguire operazioni sull'attendibilità della propagazione delle identità (Passo 4: creazione di una configurazione attendibile della propagazione delle identità) e sull'utente del servizio (Passo 3: (facoltativo) uso di un utente del servizio).
- Un'altra applicazione del dominio di Identity senza il ruolo applicazione Amministratore dominio di Identity o qualsiasi ruolo di amministratore. Si utilizzano le credenziali client per questa seconda applicazione del dominio di Identity per richiamare l'API di scambio token. È necessario autorizzare questa applicazione a essere utilizzata con lo scambio di token configurando un ID client per l'applicazione in
IdentityPropagationTrust
.
Inoltre, l'applicazione con ruolo di amministratore del dominio di Identity elevato può eseguire anche JWT to UPST Token Exchange.
Generazione di un token di accesso con ruolo di amministratore del dominio di Identity
Utilizzare l'applicazione con il ruolo applicazione Amministratore dominio di Identity definito per generare un token di accesso. Vedere Generazione di token di accesso. Utilizzare il token di accesso generato per eseguire operazioni CRUD (Create, Replace, Update, Delete) su IdentityPropagationTrusts
(Step 4: Create an Identity Propagation Trust Configuration) e sull'utente del servizio (Step 3: (Facoltativo) Use a Service User).
In alternativa, è possibile generare un token di accesso personale da utilizzare senza creare applicazioni. Ciò offre il vantaggio di non lasciare un'applicazione riservata con il ruolo Amministratore dominio di Identity. È necessario accedere allo stesso dominio in cui si sta configurando l'attendibilità. Per informazioni sulla generazione di un token di accesso personale, vedere Generazione di un token di accesso.
Passo 3: (facoltativo) utilizzare un utente del servizio
Un utente del servizio è un utente del dominio di Identity senza privilegi di accesso interattivo. Hanno privilegi minimi.
Gli utenti del servizio possono essere concessi a gruppi e applicazioni. Le applicazioni possono utilizzare gli utenti del servizio o l'utente connesso può rappresentarli per ottenere un token UPST temporaneo.
Gli utenti del servizio presentano le caratteristiche riportate di seguito.
- Deve avere un indirizzo userName. Nome e cognome non sono obbligatori.
- Può avere un indirizzo di posta elettronica (facoltativo).
- Può essere un membro di gruppi e ruoli applicazione.
- Non può avere API key.
- Impossibile utilizzare gli endpoint self-service.
- Non può avere password e i criteri password non sono validi.
L'uso di un utente del servizio è facoltativo. Se la rappresentazione utente viene utilizzata come parte della configurazione Trust, sono necessari gli utenti del servizio. In caso contrario, viene utilizzato qualsiasi altro utente del dominio di Identity. Solo gli amministratori del dominio di Identity possono creare, sostituire, aggiornare o eliminare un utente del servizio. Altri amministratori possono leggere gli utenti del servizio e i relativi attributi.
Esempio di richiesta: creazione di un utente servizio
Di seguito è riportato un esempio di richiesta con gli attributi minimi necessari per creare un utente del servizio con l'attributo serviceUser
impostato su true.
## POST on https://<domainURL>/admin/v1/Users
## Header:
"Authorization: Bearer <IDA_Access_Token>" \
"Content-Type: application/json"
## Payload:
{
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:User"
],
"urn:ietf:params:scim:schemas:oracle:idcs:extension:user:User": {
"serviceUser": true
},
"userName": "myServiceUserName"
}
Esempio di risposta: creazione di un utente servizio
Di seguito è riportato un esempio di risposta durante la creazione di un utente del servizio.
{
"idcsCreatedBy": {
"type": "App",
"display": "admin"
},
"id": "<user_id>",
"urn:ietf:params:scim:schemas:oracle:idcs:extension:user:User": {
"isFederatedUser": false,
"isGroupMembershipSyncedToUsersGroups": true,
"serviceUser": true
},
"meta": {
"created": "2023-12-07T06:52:55.380Z",
"lastModified": "2023-12-07T06:52:55.380Z",
"version": "<version>",
"resourceType": "User",
"location": "https://<domainURL>/admin/v1/Users/<user_id>"
},
"active": true,
"idcsLastModifiedBy": {
"display": "admin",
"type": "App"
},
"urn:ietf:params:scim:schemas:oracle:idcs:extension:userState:User": {
"locked": {
"on": false
}
},
"ocid": "ocid1.user.region1...<ocid>",
"userName": "myServiceUserName",
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:User",
"urn:ietf:params:scim:schemas:oracle:idcs:extension:userState:User",
"urn:ietf:params:scim:schemas:oracle:idcs:extension:capabilities:User",
"urn:ietf:params:scim:schemas:oracle:idcs:extension:user:User"
]
}
Passo 4: creare una configurazione sicura per la propagazione delle identità
La configurazione Trust di propagazione delle identità viene utilizzata per stabilire l'affidabilità tra OCI Identity e i provider cloud esterni, la convalida del token del provider cloud e il mapping dell'identità utente del provider cloud con l'identità utente dei domini di identità service
.
Attribute | Obbligatorio? | Descrizioni ed esempi |
---|---|---|
name |
Sì |
Il nome del trust. |
type |
Sì |
Tipo di token: jwt |
issuer |
Sì |
Utilizzare un emittente univoco per trovare l'identificazione del trust. |
active |
Sì |
Se abilitato, Se disabilitata, |
oauthClients |
Sì |
Lista di client OAuth autorizzati a ottenere token per un partner sicuro specifico. Esempio:
|
allowImpersonation (utilizzare serviceUser ) |
N |
Valore booleano. Specifica se l'UPST risultante deve contenere l'utente autenticato come oggetto o se deve rappresentare un utente del servizio in IAM. |
impersonatingServiceUsers |
Sì, se |
Specifica quale principal risultante rappresenterà in base al nome della richiesta di token e alle condizioni del valore. È possibile effettuare le operazioni riportate di seguito.
Esempio:
Se è consentita la rappresentazione, il token di sicurezza OCI (UPST) risultante avrà anche la richiesta correlata all'utente autenticato originale (
|
publicCertificate |
Se l'endpoint della chiave pubblica non viene fornito o non è disponibile con il provider. | Assicurarsi che la chiave pubblica sia obbligatoria se non viene fornito un endpoint della chiave pubblica. |
publicKeyEndpoint |
Fornire l'URL API della chiave pubblica oppure la chiave pubblica deve essere caricata come nell'esempio riportato di seguito. | API della chiave pubblica del provider cloud. I provider SAML e OIDC espongono l'API per recuperare la chiave pubblica per la convalida della firma. In alternativa, memorizzare il certificato pubblico nella configurazione stessa. |
Esempio di richiesta: creazione di una configurazione sicura di propagazione delle identità
## POST on https://<secureDomainURL>/admin/v1/IdentityPropagationTrusts
## Header:
"Authorization: Bearer <IDA_Access_Token>" \
"Content-Type: application/json"
## Payload:
{
"active": true,
"allowImpersonation": true,
"issuer": "<<UNIQUE_ISSUER_VALUE>>",
"name": "Token Trust JWT to UPST",
"oauthClients": [
"<oauthclient-id>"
],
"publicCertificate": "<public_certificate_value>",
"publicKeyEndpoint": "https://example.identityprovider.com/publickey/<publickey_value>",
"clientClaimName": "client_claim_name",
"clientClaimValues": [
"<<client_claim_value>>"
],
"impersonationServiceUsers": [
{
"rule": "sub eq *",
"value": "<<user_id>>"
}
],
"subjectType": "User",
"type": "JWT",
"schemas": [
"urn:ietf:params:scim:schemas:oracle:idcs:IdentityPropagationTrust"
]
}
Esempio di risposta
{
"active": true,
"allowImpersonation": true,
"issuer": "<<UNIQUE_ISSUER_VALUE>>",
"name": "Token Trust JWT to UPST",
"oauthClients": [
"<oauthclient-id>"
],
"publicCertificate": "<public_certificate_value>",
"publicKeyEndpoint": "https://example.identityprovider.com/publickey/<publickey_value>",
"clientClaimName": "client_claim_name",
"clientClaimValues": [
"<<client_claim_value>>"
],
"subjectType": "User",
"type": "JWT",
"schemas": [
"urn:ietf:params:scim:schemas:oracle:idcs:IdentityPropagationTrust"
]
}
Esempio di richiesta: per allowImpersonation
impostato su false
Identity Propagation Trust Configuration
{
"active": true,
"allowImpersonation": false,
"issuer": "<<issuer_value>>",
"name": "Token Trust JWT to UPST",
"oauthClients": [
"25d123....."
],
"publicKeyEndpoint": "https://<<secureDomainURL>>/admin/v1/SigningCert/jwk",
"clientClaimName": "client_name",
"clientClaimValues": ["<<client_name_value>>"],
"subjectClaimName": "sub",
"subjectMappingAttribute": "userName",
"subjectType": "User",
"type": "JWT",
"schemas": [
"urn:ietf:params:scim:schemas:oracle:idcs:IdentityPropagationTrust"
]
}
Esempio di richiesta: recupero di una configurazione sicura di propagazione delle identità
## GET on https://<secureDomainURL>/admin/v1/IdentityPropagationTrusts/{{id}}
## Header:
"Authorization: Bearer <IDA_Access_Token>"
Se allowImpersonation
è impostato su "true
" e impersonationServiceUsers
è definito nel Trust di propagazione delle identità, utilizzare l'esempio di richiesta riportato di seguito.
## GET on https://<secureDomainURL>/admin/v1/IdentityPropagationTrusts/{{id}}?attributes=impersonationServiceUsers
## Header:
"Authorization: Bearer <IDA_Access_Token>"
Esempio di risposta
{
"active": true,
"allowImpersonation": true,
"issuer": "<<UNIQUE_ISSUER_VALUE>>",
"name": "Token Trust JWT to UPST",
"oauthClients": [
"<oauthclient-id>"
],
"publicCertificate": "<public_certificate_value>",
"publicKeyEndpoint": "https://example.identityprovider.com/publickey/<publickey_value>",
"clientClaimName": "client_claim_name",
"clientClaimValues": [
"<<client_claim_value>>"
],
"subjectClaimName": "sub",
"subjectMappingAttribute": "userName",
"subjectType": "User",
"type": "JWT",
"impersonationServiceUsers": [
{
"ocid": "ocid1.user.oc1..this.is.user.ocid",
"rule": "sub eq *",
"value": "<<user_id>>",
"$ref": "https://<<secureDomainURL>>/admin/v1/Users/<<user_id>>"
}
"schemas": [
"urn:ietf:params:scim:schemas:oracle:idcs:IdentityPropagationTrust"
]
}
Passaggio 5: generazione di una chiave pubblica
Utilizzare i comandi seguenti in un terminale (Linux/macOS) o Git Bash su Windows:
# Generate a 2048-bit RSA private key
openssl genrsa -out private_key.pem 2048
# Extract the public key in PEM format
openssl rsa -in private_key.pem -pubout -out public_key.pem
Dopo aver eseguito le operazioni riportate di seguito.
-
private_key.pem
è la chiave privata, utilizzata per firmare il JWT. -
public_key.pem
è la chiave pubblica, utilizzata da OCI per verificare la firma JWT.
Mantenere la chiave privata sicura. Condividi solo la chiave pubblica con OCI.
Passo 6: Genera un token JWT per lo scambio con UPST
Generare un token JWT con il flusso di lavoro delle credenziali password del proprietario della risorsa di OCI, il flusso di lavoro delle credenziali client e il flusso di lavoro di asserzione degli utenti di OCI o con qualsiasi IdPs esterno, ad esempio Microsoft Entra ID, Google Firebase Authentication, AWS Cognito, Okta e altri. Il token JWT generato:
-
Contiene le richieste relative all'utente o al carico di lavoro.
-
È firmato dalla chiave privata dell'IdP in modo che OCI possa verificarne l'autenticità utilizzando la chiave pubblica.
-
Viene scambiato all'endpoint del token di sicurezza di OCI per un UPST.
Passo 7: ottieni OCI UPST
JWT viene scambiato all'endpoint di scambio di token OCI. L'endpoint del token decodifica e verifica la firma JWT utilizzando la chiave pubblica dalla configurazione trust, convalida l'emittente e le richieste corrispondenti come definito nel Trust di propagazione delle identità e genera UPST.
La ricezione generata da UPST viene utilizzata per accedere alle risorse utilizzando l'SDK/API OCI.
Parametro richiesta | Valore valido |
---|---|
grant_type |
|
requested_token_type |
|
public_key |
Workflow della chiave pubblica:
|
subject_token_type |
|
subject_token |
Se il tipo di token è:
|
Esempio di richiesta token UPST: basato sull'applicazione del dominio di Identity
Di seguito è riportato un esempio di richiesta cURL basata su applicazione del dominio di Identity OCI.
## IAM Domain App Based Request. Note that client credentials can be sent as part of basic authn header or in the payload.
curl --location ' https://<domainURL>/oauth2/v1/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'Authorization: Basic <auth_code>' \
--data-urlencode 'grant_type=urn:ietf:params:oauth:grant-type:token-exchange' \
--data-urlencode 'requested_token_type=urn:oci:token-type:oci-upst' \
--data-urlencode 'public_key=<public_key>' \
--data-urlencode 'subject_token=<subject_token>' \
--data-urlencode 'subject_token_type=jwt' -k
{
"token": "<token_id>"
}