Usando o OAuth 2 para Acessar a API REST

A API REST de domínios de identidade suporta pontos finais compatíveis com SCIM 2.0 com esquemas principais SCIM 2.0 padrão e extensões de esquema Oracle para gerenciar programaticamente usuários, grupos, aplicativos e funções de identidade, como gerenciamento de senhas e tarefas administrativas. Para fazer chamadas de API REST para seu domínio de identidades, você precisa de um token de acesso OAuth2 para usar para autorização. O token de acesso fornece uma sessão (com escopo e expiração) que seu aplicativo cliente pode usar para executar tarefas em um domínio de identidades.

O diagrama de sequência a seguir ilustra um exemplo básico do fluxo de autorização OAuth 2.0 para acessar a API REST dos domínios de identidades.

Um diagrama que ilustra um exemplo básico do fluxo de autorização OAuth 2.0 para acessar a API REST dos domínios de identidade.

Use parâmetros específicos do OAuth 2.0 ao trabalhar com um domínio de identidades. A tabela a seguir descreve os parâmetros mais comuns.

Parâmetro Valor Comentários

Cabeçalho Autorização

Básico <base64_clientid_secret>

Usado pelo cliente como um esquema de autenticação Básico para transmitir o token de acesso em um cabeçalho. O valor do token de acesso precisa ser um valor codificado em base64 UTF-8 do ID do Cliente e do Segredo do Cliente concatenados usando dois-pontos como separador, por exemplo, clientID:clientSecret.

ID do Cliente

<client_id>

Obrigatório. Uma "Chave de API" exclusiva gerada quando você registra seu aplicativo na Console do domínio de identidades.

Segredo do Cliente

<client_secret>

Obrigatório. Uma chave privada semelhante a uma senha gerada quando você registra seu aplicativo na Console do domínio de identidades. Não compartilhe esse valor.

URL do Token de Acesso

/oauth2/v1/token

Um ponto final usado para obter um token de acesso do domínio de identidades.

URL de Autorização

/oauth2/v1/authorize

Um ponto final usado para obter um código de autorização de domínios de identidades e, em seguida, usado durante um fluxo OAuth de 3 pernas.

Tipo de Concessão

client_credentials

Obrigatório. Isso significa que a API REST que é chamada pertence ao aplicativo cliente.

Escopo (obrigatório)

urn:opc:idm:__myscopes__

Este escopo retorna todas as concessões dadas ao seu aplicativo; outros escopos podem ser usados para obter concessões específicas, se necessário.

Etapa 1: Registrar um Aplicativo Confidencial em Domínios de Identidades Usando a Console

Ao registrar um aplicativo confidencial na Console do domínio de identidades, você obtém alguns dos parâmetros-chave necessários para trabalhar com OAuth 2.0: ID do Cliente, Segredo do Cliente e Escopos. OAuth 2.0 é um padrão para implementar a autorização delegada e a autorização é baseada no token de acesso necessário para acessar um recurso. O token de acesso pode ser emitido para um determinado escopo, que define o que o token de acesso pode fazer e quais recursos ele pode acessar. Quando você registra um aplicativo Web em um domínio de identidades, adiciona escopos. No exemplo a seguir, os escopos necessários para solicitar pesquisas, edições, criações e exclusões do Usuário são adicionados. Mas, se você fizesse outras coisas - por exemplo, gerencie Eventos de Auditoria, isso exigiria outros escopos.

Para criar e registrar um aplicativo confidencial, acesse a Console do OCI e conclua as seguintes etapas:

  1. Abra o menu de navegaçãoe clique em Segurança de Identidade. Em Identidade, clique em Domínios.
  2. Clique no nome do domínio de identidades no qual você deseja trabalhar. Talvez você precise alterar o compartimento para localizar o domínio desejado. Em seguida, clique em Aplicativos integrados.
  3. Clique em Adicionar aplicativo.
  4. Na caixa de diálogo Add application, selecione Confidential Application e clique em Launch workflow.
  5. Na página Adicionar detalhes do aplicativo, digite o nome e a descrição do aplicativo e clique em Próximo.
  6. Na página Configurar OAuth, em Configuração do cliente, selecione Configurar este aplicativo como cliente agora.
  7. Em Autorização, selecione apenas Credenciais do Cliente como o Tipo de Concessão Permitido.
  8. Na parte inferior da página, selecione Adicionar funções do aplicativo e clique em Adicionar funções.
  9. No painel Adicionar atribuições de aplicativo, selecione Administrador de Domínio de Identidades e clique em Adicionar.
  10. Clique em Próximo e depois clique em Finalizar.
  11. Na página de detalhes do aplicativo, role para baixo até Informações Gerais. Copie o ID do Cliente e o Segredo do Cliente e armazene-o em um local seguro.
  12. Depois que o aplicativo for criado, clique em Ativar.

Etapa 2: Base64 Codifique o ID e o Segredo do Cliente

Codifique o ID do cliente e o segredo do cliente ao incluí-lo em uma solicitação de token de acesso.
Observação

Antes da codificação base64, o URL individual codifica o ID do cliente e o segredo do cliente. Se o ID do cliente e o segredo do cliente não contiverem caracteres especiais, você não precisará codificá-los pela URL primeiro. No entanto, como prática recomendada, recomendamos vivamente.
As seções a seguir mostram como codificar base64 o ID do cliente e o segredo do cliente no formato UTF-8 usando um ambiente Windows e Mac/Linux.

Windows

  1. Inicie o Bloco de Notas e cole o ID do cliente e o segredo do cliente no Bloco de Notas.

  2. Coloque o ID do cliente e o segredo do cliente na mesma linha e insira dois-pontos entre eles: clientid:clientsecret

    Observação

    Certifique-se de que nenhum espaço seja o atributo clientid:clientsecret.
  3. Salve o arquivo em C:\temp e nomeie-o como appCreds.txt.

  4. No Windows Explorer, clique com o botão direito do mouse em C:\temp e selecione Prompt de CMD Aqui no menu de contexto.

  5. Digite o seguinte comando para codificar o ID do cliente e o segredo do cliente:
    certutil -encode appCreds.txt appbase64Creds.txt
  6. No Bloco de Notas, abra C:\temp\appbase64Creds.txt, copie seu conteúdo e feche o arquivo.
    Observação

    Por motivos de segurança, exclua os arquivos appCreds.txt e appbase64Creds.txt depois de finalizar.

Mac e Linux

  1. Inicie seu utilitário de observação preferido (por exemplo, Mac Notes, Gedit Linux ou Vi) e cole o ID do cliente e o segredo do cliente no utilitário de observação.

  2. Coloque o ID do cliente e o segredo do cliente na mesma linha e insira dois-pontos entre eles: clientid:clientsecret.

    Observação

    Certifique-se de que não haja espaços no clientid:clientsecret.
    instrução.
  3. Copie a linha clientid:clientsecret.

  4. Inicie um terminal e digite o comando a seguir, substituindo clientid:clientsecret pelo valor copiado para a área de transferência.

    echo -n "clientid:clientsecret" | base64 -w 0
    Observação

    Para o Linux, adicione -w 0 ao comando para remover quebras de linha.
  5. Copie o valor retornado.
    Observação

    Se o valor retornado for dividido em mais de uma linha, retorne ao editor de texto e certifique-se de que todos os resultados estejam em uma única linha sem quebra de texto.

Etapa 3: Obter um Token de Acesso

A próxima etapa deste processo é solicitar o token de acesso.

  1. Inicie um prompt de comando.

  2. Digite o comando cURL abaixo, substituindo o texto entre colchetes ( < > ) pelos valores apropriados:

       curl -i
       -H "Authorization: Basic <base64encoded clientid:secret>"
       -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:idm:__myscopes__"
    Observação

    Se você estiver usando um sistema operacional UNIX, poderá anexar | awk -F"\"" '{print $4}' ao final do comando cURL para fazer parsing apenas do token do Portador. Apenas lembre-se de que a expiração padrão do token é de 3600 segundos a partir do momento da solicitação.
    Observação

    Opcionalmente, execute o seguinte comando cURL para ter o valor do token de acesso acessível por meio de uma variável UNIX chamada AccessTokenValue em seu ambiente:
       export AccessTokenValue=`curl -i
       -H "Authorization: Basic <base64encoded clientid:secret>"
       -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:idm:__myscopes__" | awk -F"\"" '{print $4}' |  tail -n +16`
    Em seguida, você pode executar o comando echo $AccessTokenValue para obter o valor do token de acesso.
    Texto em Intervalos Valor
    base64encoded clientid:segredo Substitua pelas credenciais codificadas que você gerou na seção Base64 Codificar o ID do cliente e o segredo do cliente. Certifique-se de que não haja espaços nas credenciais clientid:clientsecret.
    IDCS_Service_Instance Substitua pelo URL do domínio de identidades (por exemplo, https://<domainURL>/).
    Observação

    O escopo urn:opc:idm:__myscopes__ no comando é usado como uma tag pelos clientes do domínio de identidades que solicitam tokens de acesso do servidor de autorização OAuth. São retornados tokens de acesso que contêm todos os escopos de domínios de identidade aplicáveis com base nos privilégios representados pelas atribuições de administrador de domínios de identidade concedidas ao cliente solicitante e ao usuário que está sendo especificado pela solicitação do cliente (se presente). Esse escopo não é concedido diretamente a nenhuma atribuição de administrador de domínios de identidades.
  3. Copie o valor access_token da resposta. Certifique-se de copiar apenas o token real, que é o valor access_token entre aspas:

    Status: 200
    "access_token":"eyJ4NXQiOiI4Wk. . ."
    "token":"Bearer",
    "expires_in":3600
    
    Observação

    A resposta inclui o parâmetro expires_in: 3600. Isso significa que seu token não é mais válido após uma hora a partir do momento em que você o gera. Após uma hora, atualize o token ou obtenha um novo token de acesso.

Etapa 4: Fazer uma Solicitação REST para o Ambiente

Depois de obter o token de acesso OAuth 2.0, você pode usar o token em um comando cURL para enviar uma solicitação REST à API REST de domínios de identidade. O comando a seguir retorna uma lista de usuários em um domínio de identidades.

   curl -X GET
   -H "Content-Type:application/scim+json"
   -H "Authorization: Bearer <access_token>"
   https://<domainURL>admin/v1/Users
Item Valor
Método -X OBTER
Cabeçalho do Tipo de Conteúdo -H "Content-Type:application/scim-json"
Cabeçalho de Autorização -H "Autorização: Portador <access_token>"
Protocolo HTTP HTTP ou HTTPS (o HTTP é recomendado)
Domínio de Identidades O URL do domínio de identidades (por exemplo, https://<domainURL>).
Ponto Final REST de Domínios de Identidades /admin/v1/Users

Exemplo de Saída JSON da API REST de Domínios de Identidades

Na etapa anterior, a solicitação REST enviada usando cURL retornou uma resposta no formato JSON. O JSON é um padrão aberto que pode ser formatado ou analisado de acordo com suas necessidades, como obter atributos específicos exigidos pelo seu aplicativo.

{
  "schemas": [
    "urn:scim:api:messages:2.0:ListResponse"
  ],
  "totalResults": 1,
  "Resources": [
    {
      "displayName": "admin opc",
      "name": {
        "givenName": "admin",
        "formatted": "admin opc",
        "familyName": "opc"
      },
      "urn:ietf:params:scim:schemas:oracle:idcs:extension:userState:User": {
        "locked": {
          "on": false
        }
      },
      "userName": "admin@example.com",
      "id": "d252a54d83c344eb8f59f7053a0562ce",
      "urn:ietf:params:scim:schemas:oracle:idcs:extension:user:User": {
        "isFederatedUser": false
      },
      "active": true,
      "nickName": "TAS_TENANT_ADMIN_USER",
      "emails": [
        {
          "verified": false,
          "value": "admin@example.com",
          "type": "work",
          "primary": true
        },
        {
          "verified": false,
          "value": "admin@example.com",
          "primary": false,
          "type": "recovery"
        }
      ],
      "schemas": [
        "urn:ietf:params:scim:schemas:oracle:idcs:extension:user:User",
        "urn:ietf:params:scim:schemas:oracle:idcs:extension:userState:User",
        "urn:ietf:params:scim:schemas:core:2.0:User"
      ],
      "meta": {
        "resourceType": "User",
        "created": "2022-07-22T18:11:08Z",
        "lastModified": "2022-07-25T21:19:28Z",
        "location": "https://<domainURL>admin/v1/Users/d252a54d83c344eb8f59f7053a0562ce"
      },
      "idcsLastModifiedBy": {
        "value": "idcssso",
        "$ref": "https://<domainURL>admin/v1/Apps/idcssso",
        "type": "App",
        "display": "idcssso"
      }
    }
  ],
  "startIndex": 1,
  "itemsPerPage": 50
}