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 padrão SCIM 2.0 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 do OAuth 2.0 para acessar a API REST de domínios de identidades.

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

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 de 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 UTF-8 base64 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 que é 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 este 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 Autenticaçã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 etapas.

Tipo da 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 concedidas 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 Identidade Usando a Console

Quando você registra um aplicativo confidencial na Console do domínio de identidades, obtém alguns dos principais parâmetros necessários para trabalhar com o OAuth 2.0: ID do Cliente, Segredo do Cliente e Escopos. O OAuth 2.0 é um padrão para implementar a autorização delegada, e a autorização se baseia 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. Ao registrar um aplicativo Web em um domínio de identidades, você 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ê fosse fazer outras coisas, por exemplo, gerenciar Eventos de Auditoria, isso exigiria outros escopos.

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

  1. Abra o menu de navegação e selecione Identidade e Segurança. Em Identidade, selecione Domínios.
  2. Clique no nome do domínio de identidades no qual deseja trabalhar. Talvez você precise alterar o compartimento para localizar o domínio desejado. Em seguida, clique em Aplicativos integrados.
  3. Selecione Adicionar aplicativo.
  4. Na caixa de diálogo Adicionar aplicativo, selecione Aplicativo Confidencial e, em seguida, selecione Iniciar workflow.
  5. Na página Adicionar detalhes do aplicativo, informe um nome e uma descrição do aplicativo e selecione Próximo.
  6. Na página Configurar OAuth, em Configuração de cliente, selecione Configurar este aplicativo como um 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 atribuições de aplicativo e, em seguida, Adicionar atribuições.
  9. No painel Adicionar atribuições de aplicativo, selecione Administrador de Domínio de Identidades e, em seguida, selecione Adicionar.
  10. Selecione Próximo e, em seguida, selecione Concluir.
  11. Na página detalhada do aplicativo, role para baixo até Informações Gerais. Copie o ID do Cliente e o Secreto do Cliente e armazene-o em um local seguro.
  12. Depois que a aplicação for criada, selecione Ativar.

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

Você deve codificar o ID do cliente e o segredo do cliente quando o incluir em uma solicitação de um 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, não será necessário codificá-los pela URL primeiro. No entanto, como prática recomendada, é altamente recomendável.
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.

Janelas

  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 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 CMD Aqui no menu de contexto.

  5. Insira 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 após a conclusão.

Mac e Linux

  1. Inicie o utilitário de anotaçã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 anotação.

  2. Coloque o ID 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 insira o comando a seguir, substituindo clientid:clientsecret pelo valor que você copiou 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

O próximo passo neste processo é solicitar o token de acesso.

  1. Inicie um prompt de comando.

  2. Insira o comando cURL abaixo, substituindo o texto entre parênteses ( < > ) 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

    Se preferir, execute o seguinte comando cURL para ter o valor do token de acesso acessível por meio de uma variável UNIX chamada AccessTokenValue no 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:secret Substitua pelas credenciais codificadas que você gerou na seção Base64 Encode 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 seu 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 identidades aplicáveis com base nos privilégios representados pelas atribuições de administrador de domínios de identidades 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. Para atualizar o token, insira o comando cURL abaixo, substituindo o texto entre parênteses ( < > ) pelos valores apropriados:
    curl -i
      -H "Authorization: Basic <base64 encoded client ID and secret>"
      -H "Content-Type: application/x-www-form-urlencoded;charset=UTF-8"
      --request POST https://<domainURL>/oauth2/v1/token
      -d "grant_type=refresh_token&refresh_token=<token_value>"

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

Depois de obter o token de acesso OAuth 2.0, você poderá usar o token em um comando cURL para enviar uma solicitação REST à API REST de domínios de identidades. 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 de Tipo de Conteúdo -H "Tipo de conteúdo:aplicação/scim-json"
Cabeçalho de Autorização -H "Autorização: Portador <access_token>"
Protocolo HTTP HTTP ou HTTPS (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 o 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
}