Tipo de permiso de intercambio de token: intercambio de un token web JSON para un UPST
El intercambio de tokens JWT-to-UPST permite que las identidades federadas (usuarios o aplicaciones autenticadas mediante IDCS u otro proveedor de identidad) accedan de forma segura a los servicios de OCI (plano de control de OCI) sin gestionar usuarios nativos de OCI ni claves de API.
- JWT (token web JSON): emitido por un IdP de confianza, como proveedores de identidad externos o nativos de OCI (IdPs), contiene reclamaciones firmadas sobre el usuario o el servicio.
- UPST (token de seguridad de principal de usuario): OCI de token de corta duración aceptado como autenticación para el acceso a la API.
- El punto final de intercambio de token valida el JWT, extrae reclamaciones y emite un UPST de corta duración.
Esto permite a los usuarios autenticados mediante IdPs externo, como Okta, Microsoft Entra ID y otros, o el propio IdP de OCI, obtener acceso a los recursos de OCI.
Término | Descripción |
---|---|
API de servicio de intercambio de token de IAM | Servicio OAuth del dominio de identidad de IAM: /oauth2/v1/token . La API acepta tanto las cabeceras de autenticación/carga útil estándar basadas en OAuth como las firmas de OCI. Para obtener información sobre cómo utilizar un cliente OAuth con un dominio de identidad para acceder a las API de REST, consulte Uso de OAuth 2 para acceder a la API de REST. |
Configuración de confianza de propagación de identidad | Utilice configuraciones de confianza de propagación de identidad para activar la propagación de identidad de extremo a extremo segura desde un proveedor de identidad externo (IdP) a Oracle Cloud Infrastructure (OCI). Este mecanismo permite a OCI Identity validar el token del IdP externo y establecer una asignación de confianza entre la identidad del usuario externo y un usuario o principal de servicio de IAM en OCI. Al enviar el contexto de seguridad del usuario autenticado desde el frontend (por ejemplo, un IdP externo) a los servicios de backend de OCI, la propagación de identidad elimina la necesidad de cuentas genéricas o con privilegios. Mejora la seguridad, permite una auditabilidad detallada de las llamadas de API y soporta escenarios de autenticación avanzada. El punto final de API |
Usuario de servicio | Un usuario sin privilegios de inicio de sesión interactivo. Los usuarios de servicio se pueden otorgar a grupos y roles de servicio. Las aplicaciones pueden utilizar usuarios de servicio o los usuarios conectados pueden suplantarlos para obtener un UPST temporal. El uso de un usuario de servicio es opcional. Para obtener más información sobre el uso de usuarios de servicio, consulte el Step 3: (Optional) Use a Service User. |
Token de sesión de principal de usuario (UPST) | Un token generado por OCI IAM que se puede utilizar para acceder a los servicios de OCI (plano de control de OCI). Un UPST también se conoce como token de seguridad cuando lo utiliza con SDK o Terraform. Representa el principal de usuario de servicio autenticado. |
Flujo

Exención de responsabilidad: todos los nombres de productos, logotipos, marcas y logotipos son marcas comerciales de sus respectivos propietarios y se utilizan aquí solo con fines informativos.
Pasos de intercambio de token de JWT a UPST
Utilice los siguientes pasos para intercambiar un token de JWT por un UPST:
- Step1: (opcional) creación de un Dominio de Identidad
- Paso 2: Crear aplicaciones de dominio de identidad
- Paso 3: (Opcional) Utilizar un usuario de servicio
- Paso 4: Crear una Configuración de Confianza de Propagación de Identidad
- Paso 5: Generación de una clave pública
- Paso 6: Generar un token de JWT para intercambiar para UPST
- Paso 7: Consigue OCI UPST
Step1: (opcional) creación de un Dominio de Identidad
Cree un nuevo dominio de identidad si no existe. Consulte Creación de un Dominio de Identidad.
Paso 2: Crear aplicaciones de dominio de identidad
Un cliente OAuth es una aplicación de confianza registrada con Identity Cloud Service para autenticar y obtener tokens de acceso mediante flujos OAuth 2.0. Este cliente se utiliza para:
-
Obtenga un token de acceso para llamar a las API de administración de IDCS.
-
Federa la identidad de la aplicación para intercambiar JWT por UPST.
Consulte Adición de una aplicación confidencial. Después de crear la aplicación, guarde el ID de cliente y el secreto de cliente en una ubicación segura. Necesita dos aplicaciones de dominio de identidad siguiendo el principio de privilegio mínimo (PoLP):
- Aplicación con rol de aplicación Administrador de dominio de identidad (IDA). Puede utilizar un token de acceso generado mediante esta aplicación para realizar operaciones en Identity Propagation Trust (Paso 4: Creación de una Configuración de Confianza de Propagación de Identidad) y en el usuario de servicio (Paso 3: (Opcional) Uso de un Usuario de Servicio).
- Otra aplicación de dominio de identidad sin el rol de aplicación de administrador de dominio de identidad o cualquier rol de administrador. Utilice las credenciales de cliente para esta segunda aplicación de dominio de identidad para llamar a la API de intercambio de tokens. Debe autorizar que esta aplicación se utilice con el intercambio de tokens configurando un ID de cliente para la aplicación en
IdentityPropagationTrust
.
Además, la aplicación con el rol de aplicación Administrador de dominio de identidad elevado también puede realizar JWT en UPST Token Exchange.
Generación de un token de acceso con el rol de administrador de dominio de identidad
Utilice la aplicación con el rol de aplicación Administrador de dominio de identidad definido para generar un token de acceso. Consulte Generación de tokens de acceso. Utilice el token de acceso generado para realizar operaciones CRUD (Crear, Sustituir, Actualizar, Suprimir) en IdentityPropagationTrusts
(Paso 4: Crear una Configuración de Confianza de Propagación de Identidad) y el usuario de servicio (Paso 3: (Opcional) Utilizar un Usuario de Servicio).
También puede generar un token de acceso personal para utilizar sin crear aplicaciones. Esto ofrece la ventaja de no dejar una aplicación confidencial con el rol de administrador de dominio de identidad. Debe haber iniciado sesión en el mismo dominio en el que está configurando la confianza. Para obtener información sobre la generación de un token de acceso personal, consulte Generación de un token de acceso.
Paso 3: (Opcional) Utilizar un usuario de servicio
Un usuario de servicio es un usuario de dominio de identidad sin privilegios de conexión interactiva. Tienen privilegios mínimos.
Los usuarios de servicio se pueden otorgar a grupos y aplicaciones. Las aplicaciones pueden utilizar usuarios de servicio o el usuario que ha iniciado sesión puede suplantarlos para obtener un token UPST temporal.
Los usuarios del servicio tienen las siguientes características:
- Debe tener un valor userName. El nombre y el apellido no son necesarios.
- Puede tener una dirección de correo electrónico (opcional).
- Puede ser miembro de grupos y roles de aplicación.
- No se pueden tener claves API.
- No se pueden utilizar puntos finales de autoservicio.
- No se pueden tener contraseñas y las políticas de contraseñas no se aplican.
El uso de un usuario de servicio es opcional. Si la suplantación de usuario se utiliza como parte de la configuración de confianza, se necesitan usuarios de servicio. De lo contrario, se utiliza cualquier otro usuario del dominio de identidad. Solo los administradores de dominio de identidad pueden crear, sustituir, actualizar o suprimir un usuario de servicio. Otros administradores pueden leer los usuarios de servicio y sus atributos.
Ejemplo de solicitud: creación de un usuario de servicio
A continuación se muestra un ejemplo de una solicitud con los atributos mínimos necesarios para crear un usuario de servicio con el atributo serviceUser
definido en 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"
}
Ejemplo de respuesta: creación de un usuario de servicio
A continuación, se muestra un ejemplo de una respuesta al crear un usuario de servicio.
{
"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"
]
}
Paso 4: Crear una Configuración de Confianza de Propagación de Identidad
La configuración de confianza de propagación de identidad se utiliza para establecer la confianza entre OCI Identity y los proveedores de nube externos, la validación del token de proveedor de nube y la asignación de la identidad de usuario del proveedor de nube con la identidad de usuario de los dominios de identidad service
.
Atributo | ¿Obligatorio? | Descripciones y ejemplos |
---|---|---|
name |
Sí |
Nombre de la confianza. |
type |
Sí |
Tipo de token: jwt |
issuer |
Sí |
Use un emisor único para ayudar a encontrar la identificación del fideicomiso. |
active |
Sí |
Si está activado, Si está desactivado, |
oauthClients |
Sí |
Lista de clientes OAuth que pueden obtener tokens para un socio de confianza específico. Ejemplo:
|
allowImpersonation (utilice serviceUser ) |
No |
Valor booleano. Especifica si el UPST resultante debe contener el usuario autenticado como asunto o si debe suplantar a un usuario de servicio en IAM. |
impersonatingServiceUsers |
Sí, si |
Especifica qué principal resultante va a suplantar en función del nombre de reclamación de token y las condiciones de valor. Puede:
Ejemplo:
Si se permite la suplantación, el token de seguridad de OCI (UPST) resultante tendrá la reclamación original autenticada relacionada con el usuario (
|
publicCertificate |
Si el punto final de clave pública no se proporciona o no está disponible con el proveedor. | Asegúrese de que la clave pública es obligatoria si no se proporciona un punto final de clave pública. |
publicKeyEndpoint |
Proporcione la URL de API de clave pública o la clave pública se debe cargar como en el ejemplo siguiente. | API de clave pública del proveedor de nube. Los proveedores de SAML y OIDC exponen la API para recuperar la clave pública para la validación de firmas. También puede almacenar el certificado público en la propia configuración. |
Ejemplo de solicitud: creación de una configuración de confianza de propagación de identidad
## 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"
]
}
Ejemplo de respuesta
{
"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"
]
}
Ejemplo de solicitud: para allowImpersonation
definido en false
Configuración de confianza de propagación de identidad
{
"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"
]
}
Ejemplo de solicitud: recuperación de una configuración de confianza de propagación de identidad
## GET on https://<secureDomainURL>/admin/v1/IdentityPropagationTrusts/{{id}}
## Header:
"Authorization: Bearer <IDA_Access_Token>"
Si allowImpersonation
está definido en "true
" y impersonationServiceUsers
está definido en la confianza de propagación de identidad, utilice el siguiente ejemplo de solicitud.
## GET on https://<secureDomainURL>/admin/v1/IdentityPropagationTrusts/{{id}}?attributes=impersonationServiceUsers
## Header:
"Authorization: Bearer <IDA_Access_Token>"
Ejemplo de respuesta
{
"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"
]
}
Paso 5: Generación de una clave pública
Utilice los siguientes comandos en un terminal (Linux/macOS) o Git Bash en 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
Después de ejecutar estos:
-
private_key.pem
es la clave privada, que se utiliza para firmar el JWT. -
public_key.pem
es la clave pública que utiliza OCI para verificar la firma de JWT.
Mantenga la clave privada segura. Solo comparta la clave pública con OCI.
Paso 6: Generar un token de JWT para intercambiar para UPST
Genere un token de JWT con el flujo de trabajo de credenciales de contraseña de propietario de recursos, el flujo de trabajo de credenciales de cliente y el flujo de trabajo de afirmación de usuarios de OCI, o con cualquier IdPs externo, como Microsoft Entra ID, Google Firebase Authentication, AWS Cognito, Okta y otros. El token de JWT generado:
-
Contiene reclamaciones sobre el usuario o la carga de trabajo.
-
Está firmada por la clave privada del IdP para que OCI pueda verificar su autenticidad mediante la clave pública.
-
Se intercambia en el punto final de token de seguridad de OCI por un UPST.
Paso 7: Consigue OCI UPST
El JWT se intercambia en el punto final de intercambio de tokens de OCI. El punto final de token descodifica y verifica la firma JWT mediante la clave pública de la configuración de confianza, valida el emisor y las reclamaciones coincidentes según se definen en la confianza de propagación de identidad y genera UPST.
El UPST generado recibido se utiliza para acceder a los recursos mediante el SDK/API de OCI.
Parámetro de solicitud | Valor válido |
---|---|
grant_type |
|
requested_token_type |
|
public_key |
Flujo de trabajo de clave pública:
|
subject_token_type |
|
subject_token |
Si el tipo de token es:
|
Ejemplo de solicitud de token UPST: basado en aplicación de dominio de identidad
A continuación se muestra un ejemplo de solicitud de cURL basada en aplicaciones de dominio de identidad de 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>"
}