Tipo de Concessão de Intercâmbio de Token: Trocando um Token Web JSON para um UPST
A troca de tokens JWT-to-UPST permite que identidades federadas (usuários ou aplicativos autenticados usando o IDCS ou outro provedor de identidades) acessem com segurança os serviços do OCI (OCI Control Plane) sem gerenciar usuários nativos do OCI ou chaves de API.
- JWT (JSON Web Token): Emitido por um IdP confiável, como provedores de identidade externos ou nativos do OCI (IdPs), ele contém reivindicações assinadas sobre o usuário ou o serviço.
- UPST (User Principal Security Token): Um token de curta duração da OCI aceito como autenticação para acesso à API.
- O Ponto Final de Troca de Token valida o JWT, extrai reivindicações e emite um UPST de curta duração.
Isso permite que os usuários autenticados usando IdPs externo, como Okta, Microsoft Entra ID e outros, ou o próprio OCI IdP, obtenham acesso aos recursos do OCI.
Termo | Descrição |
---|---|
API do Serviço IAM Token Exchange | Serviço OAuth do domínio de identidades do IAM: /oauth2/v1/token . A API aceita cabeçalhos/payload de autenticação baseados no padrão OAuth e assinaturas do OCI. Para saber como usar um cliente OAuth com um domínio de identidades para acessar as APIs REST, consulte Usando o OAuth 2 para Acessar a API REST. |
Configuração de Confiança da Propagação de Identidades | Use as configurações de Confiança de Propagação de Identidade para permitir a propagação segura de identidade de ponta a ponta de um provedor de identidades externo (IdP) para o OCI (Oracle Cloud Infrastructure). Esse mecanismo permite que o OCI Identity valide o token do IdP externo e estabeleça um mapeamento confiável entre a identidade do usuário externo e um usuário ou principal de serviço do IAM no OCI. Ao enviar o contexto de segurança do usuário autenticado do frontend (por exemplo, um IdP externo) para os serviços de backend no OCI, a propagação de identidade elimina a necessidade de contas genéricas ou privilegiadas. Ele aprimora a segurança, permite a auditoria detalhada de chamadas de API e suporta cenários de autenticação avançada. O ponto final da API |
Usuário do Serviço | Um usuário sem privilégios de conexão interativa. Os usuários de serviço podem ser concedidos a grupos e atribuições de serviço. Os aplicativos podem usar usuários de serviço ou usuários conectados podem se passar por eles para obter um UPST temporário. O uso de um usuário de serviço é opcional. Para obter mais informações sobre como usar usuários de serviço, consulte a Etapa 3: (Opcional) Usar um Usuário de Serviço. |
Token da Sessão Principal do Usuário (UPST) | Um token gerado pelo OCI IAM que pode ser usado para acessar serviços do OCI (OCI Control Plane). Um UPST também é conhecido como token de segurança quando você o usa com SDK ou Terraform. Representa o principal do usuário do serviço autenticado. |
Fluxo

Isenção de responsabilidade: todos os nomes de produtos, logotipos e marcas e logotipos são marcas comerciais de seus respectivos proprietários e utilizados aqui apenas para fins informativos.
Etapas de Troca de Token JWT para UPST
Use as seguintes etapas para trocar um token JWT por um UPST:
- Step1: (Opcional) Criando um Domínio de Identidades
- Etapa 2: Criar Aplicativos do Domínio de Identidades
- Etapa 3: (Opcional) Usar um Usuário de Serviço
- Etapa 4: Criar uma Configuração de Confiança de Propagação de Identidade
- Etapa 5: Gerando uma Chave Pública
- Etapa 6: Gerar um Token JWT para trocar pelo UPST
- Etapa 7: Obtenha o OCI UPST
Step1: (Opcional) Criando um Domínio de Identidades
Crie um novo domínio de identidades se ele não existir. Consulte Criando um Domínio de Identidades.
Etapa 2: Criar Aplicativos do Domínio de Identidades
Um Cliente OAuth é um aplicativo confiável registrado no Identity Cloud Service para autenticar e obter tokens de acesso usando fluxos do OAuth 2.0. Você usa este cliente para:
-
Obtenha um token de acesso para chamar APIs de Administrador do IDCS.
-
Federar a identidade do aplicativo para trocar JWT pelo UPST.
Consulte Adicionando um Aplicativo Confidencial. Depois de criar o aplicativo, salve o id do cliente e o segredo do cliente em um local seguro. Você precisa de dois aplicativos de domínio de identidades seguindo o Princípio do Privilégio Mínimo (PoLP):
- Um aplicativo com a atribuição de Aplicativo IDA (Identity Domain Administrator). Você usa um token de acesso gerado usando este aplicativo para executar operações na Confiança de Propagação de Identidade (Etapa 4: Criar uma Configuração de Confiança de Propagação de Identidade) e no usuário de serviço (Etapa 3: (Opcional) Usar um Usuário de Serviço).
- Outro aplicativo de domínio de identidades sem a atribuição de Aplicativo Administrador de Domínio de Identidades ou qualquer atribuição de administrador. Você usa credenciais de cliente para este segundo aplicativo de domínio de identidades para chamar a API de troca de token. Autorize esse aplicativo a ser usado com a troca de tokens configurando um ID de cliente para o aplicativo em
IdentityPropagationTrust
.
Além disso, o aplicativo com atribuição de Aplicativo de Administrador de Domínio de Identidades elevada também pode executar o JWT para o UPST Token Exchange.
Gerando um Token de Acesso com a atribuição de Administrador do Domínio de Identidades
Use o aplicativo com a atribuição de Aplicativo Administrador do Domínio de Identidades definida para gerar um token de acesso. Consulte Gerando Tokens de Acesso. Use o token de acesso gerado para executar operações CRUD (Criar, Substituir, Atualizar, Excluir) na IdentityPropagationTrusts
(Etapa 4: Criar uma Configuração de Confiança de Propagação de Identidade) e no usuário de serviço (Etapa 3: (Opcional) Usar um Usuário de Serviço).
Como alternativa, você pode gerar um token de acesso pessoal a ser usado sem criar aplicativos. Isso oferece a vantagem de não deixar um aplicativo confidencial com a atribuição de Administrador do Domínio de Identidades. Você deve se conectar ao mesmo domínio em que está configurando a confiança. Para obter informações sobre como gerar um token de acesso pessoal, consulte Gerando um Token de Acesso.
Etapa 3: (Opcional) Usar um Usuário de Serviço
Um usuário do serviço é um usuário do domínio de identidades sem privilégios de acesso interativo. Eles têm privilégios mínimos.
Os usuários do serviço podem ser concedidos a grupos e aplicativos. Os aplicativos podem usar usuários de serviço ou o usuário conectado pode personificá-los para obter um token UPST temporário.
Os usuários do serviço têm as seguintes características:
- Deve ter um userName. O nome e o sobrenome não são obrigatórios.
- Pode ter um endereço de e-mail (Opcional).
- Pode ser membro de grupos e atribuições de aplicativo.
- Não é possível ter chaves de API.
- Não é possível usar pontos finais de autoatendimento.
- Não é possível ter senhas, e as políticas de senha não se aplicam.
O uso de um usuário de serviço é opcional. Se a personificação do usuário for usada como parte da configuração de Confiança, os usuários do serviço serão necessários. Caso contrário, qualquer outro usuário do domínio de identidades será usado. Somente administradores de domínio de identidades podem criar, substituir, atualizar ou excluir um usuário de serviço. Outros administradores podem ler usuários de serviço e seus atributos.
Exemplo de Solicitação: Criar um Usuário de Serviço
Veja a seguir um exemplo de solicitação com os atributos mínimos necessários para criar um usuário de serviço com o atributo serviceUser
definido como 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"
}
Exemplo de Resposta: Criar um Usuário de Serviço
O exemplo a seguir mostra um exemplo de resposta ao criar um usuário de serviço.
{
"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"
]
}
Etapa 4: Criar uma Configuração de Confiança de Propagação de Identidade
A configuração de Confiança de Propagação de Identidade é usada para estabelecer a confiança entre a Identidade do OCI e os provedores de Nuvem externos, a validação do token do provedor de Nuvem e o mapeamento da identidade do usuário do provedor de Nuvem com a identidade do usuário service
dos domínios de identidade.
Atributo | Obrigatório? | Descrições e Exemplos |
---|---|---|
name |
Sim |
O nome da confiança. |
type |
Sim |
O tipo de token: jwt |
issuer |
Sim |
Use um emissor exclusivo para ajudar a encontrar a identificação de confiança. |
active |
Sim |
Se ativado, Se estiver desativado, |
oauthClients |
Sim |
Uma lista de clientes OAuth que têm permissão para obter tokens para um parceiro confiável específico. Exemplo:
|
allowImpersonation (fazer uso de serviceUser ) |
Não |
Valor booleano. Especifica se o UPST resultante deve conter o usuário autenticado como assunto ou se deve representar um usuário de serviço no IAM. |
impersonatingServiceUsers |
Sim, se |
Especifica qual principal resultante será representado com base no nome da reivindicação de token e nas condições de valor. Você pode:
Exemplo:
Se a personificação for permitida, o token de segurança do OCI (UPST) resultante terá a reivindicação original relacionada ao usuário autenticado (
|
publicCertificate |
Se o ponto final da chave pública não for fornecido ou não estiver disponível com o provedor. | Certifique-se de que a chave pública seja obrigatória se um ponto final de chave pública não for fornecido. |
publicKeyEndpoint |
Forneça o URL da API de chave pública ou a chave pública deve ser carregada como no exemplo a seguir. | A API de chave pública do provedor de nuvem. Os provedores SAML e OIDC expõem a API para recuperar a chave pública para validação de assinatura. Como alternativa, armazene o certificado público na própria configuração. |
Exemplo de Solicitação: Criar uma Configuração de Confiança de Propagação de Identidade
## 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"
]
}
Exemplo de Resposta
{
"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"
]
}
Exemplo de Solicitação: Para allowImpersonation
definido como false
Configuração de Confiança de Propagação de Identidade
{
"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"
]
}
Exemplo de Solicitação: Recuperando uma Configuração de Confiança de Propagação de Identidade
## GET on https://<secureDomainURL>/admin/v1/IdentityPropagationTrusts/{{id}}
## Header:
"Authorization: Bearer <IDA_Access_Token>"
Se allowImpersonation
estiver definido como "true
" e impersonationServiceUsers
estiver definido na Confiança de Propagação de Identidade, use o exemplo de solicitação a seguir.
## GET on https://<secureDomainURL>/admin/v1/IdentityPropagationTrusts/{{id}}?attributes=impersonationServiceUsers
## Header:
"Authorization: Bearer <IDA_Access_Token>"
Exemplo de Resposta
{
"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"
]
}
Etapa 5: Gerando uma Chave Pública
Use os seguintes comandos em um terminal (Linux/macOS) ou Git Bash no 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
Depois de executar estas ações:
-
private_key.pem
é a chave privada, usada para assinar o JWT. -
public_key.pem
é a chave pública, usada pelo OCI para verificar a assinatura JWT.
Mantenha a chave privada segura. Só compartilhe a chave pública com a OCI.
Etapa 6: Gerar um Token JWT para trocar pelo UPST
Gere um token JWT com o Workflow de Credenciais de Senha do Proprietário do Recurso, o Workflow de Credenciais do Cliente e o Workflow de Asserção do Usuário da OCI ou com qualquer IdPs externo, como ID do Microsoft Entra, Autenticação do Google Firebase, AWS Cognito, Okta e outros. O token JWT gerado:
-
Contém reivindicações sobre o usuário ou carga de trabalho.
-
É assinado pela chave privada do IdP para que o OCI possa verificar sua autenticidade usando a chave pública.
-
É trocado no ponto final do token de segurança da OCI por um UPST.
Etapa 7: Obtenha o OCI UPST
O JWT é trocado no ponto final de troca de token do OCI. O ponto final do token decodifica e verifica a assinatura JWT usando a chave pública da configuração de confiança, valida o emissor e as reivindicações correspondentes conforme definido na Confiança de Propagação de Identidade e gera UPST.
O UPST gerado recebido é usado para acessar recursos usando o OCI SDK/API.
Parâmetro da Solicitação | Valor Válido |
---|---|
grant_type |
|
requested_token_type |
|
public_key |
O workflow de chave pública:
|
subject_token_type |
|
subject_token |
Se o tipo de token for:
|
Exemplo de Solicitação de Token UPST: Baseado no Aplicativo do Domínio de Identidades
Veja a seguir um exemplo de solicitação cURL baseada em aplicativo do domínio de identidades da 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>"
}