Observação:

Integrar o OCI Streaming com Outros Métodos de Autorização Usando o OCI API Gateway

Introdução

Muitas vezes, precisamos de nossos aplicativos para consumir serviços REST da Oracle Cloud Infrastructure (OCI). Há várias maneiras de garantir a segurança entre os componentes, garantindo que o aplicativo possa ser autenticado com segurança no serviço de back-end.

Na maioria das vezes, essa tarefa é nativa no Oracle Cloud, pois há várias maneiras de proteger a rede e o acesso aos serviços existentes. Apenas algumas configurações e você está feito. No entanto, há casos em que o aplicativo pode oferecer requisitos adicionais de segurança e conectividade. O caso de uso deste tutorial atende a uma necessidade muito comum no cenário híbrido ou multicloud (on-premises conectado ao Oracle Cloud ou o Oracle Cloud conectado a outra nuvem).

Vamos apresentar o seguinte cenário:

Portanto, o tutorial fornece a seguinte solução:

Observação: O código do OCI Functions pode ser baixado aqui: OAuthOCIService-fn.zip.

Objetivos

Pré-requisitos

Tarefa 1: Configurar OAuth2 com o Oracle Identity Cloud Service

  1. Obter os Parâmetros do Gateway de API do OCI: Vamos começar a configurar o mecanismo OAuth2. Precisamos integrar sua instância do OCI API Gateway a um provedor de identidades configurando o Oracle Identity Cloud Service do Oracle Cloud para ser o provedor de identidades.

    • Vá para a instância do OCI API Gateway e copie o Nome do Host. Essas informações serão usadas na configuração do servidor de recursos do Oracle Identity Cloud Service na próxima etapa.

      img.png

  2. Criar um Aplicativo de Recurso: Precisamos criar um autorizador OAuth2 para seu aplicativo. Podemos fazer isso com o Oracle Identity Cloud Service no Oracle Cloud.

    1. Na Console do OCI, vá para Identidade e Segurança e selecione Federação.

      img.png

    2. Clique em OracleIdentityCloudSevice.

      img.png

    3. Clique no link Console do Oracle Identity Cloud Service da sua instância do Oracle Identity Cloud Service.

      img.png

    4. Criaremos dois aplicativos. Clique em Aplicativos e Serviços.

      img.png

    5. Nos Aplicativos, clique em Adicionar.

      img.png

    6. Selecione Aplicativo Confidencial para iniciar a configuração do servidor de recursos.

      img.png

    7. Configuraremos o primeiro aplicativo. Informe um Nome no aplicativo do servidor de recursos e clique em Próximo.

      img.png

    8. Clique em Ir para mais tarde. Precisamos configurar apenas o recurso.

      img.png

    9. Informe o nome do host do Gateway de API obtido na Etapa 1.

      img.png

    10. Clique em Adicionar Escopo e especifique as informações do escopo.

      img.png

    11. Verifique as informações do escopo, clique em Próximo duas vezes e clique em Finalizar.

      img.png

    12. Clique em Ativar para ativar seu aplicativo.

      img.png

  3. Criar um Aplicativo Cliente.

    1. Em Aplicativos, clique em Adicionar.

      img.png

    2. Selecione Aplicativo Confidencial para iniciar a configuração do servidor de recursos.

      img.png

    3. Informe um Nome para seu aplicativo e clique em Próximo.

      img_1.png

    4. Selecione Configurar o aplicativo como cliente agora para ativar as configurações do seu aplicativo cliente. Selecione Credenciais do Cliente, Asserção JWT e Em nome de.

      img.png

      Observação: Se você quiser validar OAuth2 em seu código de função, DEVE definir o flag Introspecção. Isso ativará o serviço de API REST do Oracle Identity Cloud Service /oauth2/v1/introspect.

      img_10.png

    5. Role para baixo e clique em Adicionar Escopo.

      img.png

    6. Localize seu aplicativo de recursos criado antes (oauth_resource_server) e clique em Adicionar.

      img.png

    7. Você pode ver seu escopo adicionado ao seu aplicativo. Clique em Próximo.

      img.png

      Observação: Observe o valor do escopo; você precisará usá-lo para solicitar um token.

    8. Ignore as janelas Recursos e Política da Camada Web. Em Autorização, selecione Impor Concessões como Autorização e clique em Finalizar.

      img.png

    9. Observe o ID do Cliente e as informações de Segredo do Cliente. Você precisará disso para obter seu token.

      img.png

    10. Clique em Ativar para ativar o aplicativo e seu autorizador OAuth2 está pronto para teste.

      img_1.png

  4. Obter um Token: Agora podemos testar o autorizador OAuth2 para obter o token.

    1. Crie o URL do autorizador. Você pode obter isso obtendo o URL do Oracle Identity Cloud Service no browser. No URL do Oracle Identity Cloud Service, você pode ver algo assim: https://idcs-xxxxxxxxxxxxx.identity.oraclecloud.com/ui/v1/adminconsole.

    2. Você precisará do link do URL até oraclecloud.com, que é o ponto final raiz. Por exemplo, https://idcs-xxxxxxxxxxxxx.identity.oraclecloud.com.

    3. Precisamos adicionar o caminho de autenticação oAuth. Esse URL será executado como uma solicitação REST POST. Por exemplo, https://idcs-xxxxxxxxxxxxx.identity.oraclecloud.com/oauth2/v1/token. Você precisará informar alguns parâmetros para solicitar o token.

    4. Digite as credenciais como Autenticação Básica, ID do Cliente e Segredo do Cliente.

      img.png

    5. No conteúdo Corpo, informe os valores grant_type e escopo. Lembre-se de que o escopo foi capturado na configuração do Oracle Identity Cloud Service.

      img.png

    6. Clique em Enviar, execute a solicitação POST e exiba o token.

      img_2.png

Tarefa 2: Configurar o OCI Functions para chamar sua API do OCI SDK

  1. Entenda as Funções do OCI e o Gateway de API do OCI: É uma prática recomendada expor seus serviços por meio de um Gateway de API do OCI. A autenticação pode ser feita ignorando as credenciais do Gateway de API do OCI para os serviços de backend, mas se a autenticação de backend não for o método apropriado para seu aplicativo cliente, poderemos fazer alguma configuração no nível do Gateway de API do OCI.

    Nesta etapa, vamos entender como o OCI API Gateway pode nos ajudar a integrar a autenticação OAuth2 e a solicitação de qualquer serviço do OCI, como o OCI Streaming por meio do OCI Functions.

    O serviço OCI Functions pode fazer o trabalho para produzir a autenticação/autorização correta e passar para o serviço OCI sem a necessidade de transmitir credenciais do usuário ou chaves privadas aos aplicativos consumidores. Alguns serviços no serviço OCI não podem ser autenticados usando o método OAuth2; portanto, podemos fazer isso com o OCI Functions. Para criar e implantar o OCI Functions, consulte Início Rápido do OCI Functions.

    Neste exemplo, o serviço OCI Streaming pode ser autenticado pela chave privada do OCI no OCI IAM por meio do método draft-cavage-http-signatures-08 e os consumidores podem autenticar por OAuth2.

  2. Entender o Código: Este código será usado com o Gateway de API do OCI. Na sua implantação de API, configuraremos o ponto final do OCI Streaming no Gateway de API do OCI e ele será passado como um parâmetro de autorização HEADER. Portanto, você pode usar essa função para muitos serviços em cada implantação do Gateway de API do OCI necessária.

    img_12.png

    • Esta função em Python criará uma data e hora em formato para a autenticação. Essa data e hora precisam ser geradas uma vez e usadas em dois pontos. Para a Data do cabeçalho na solicitação do OCI Streaming e o HEADER criptografado da Assinatura.

      img_1.png

    • Esta é a função para criptografia de assinatura. A montagem consiste em usar a chave privada do usuário do OCI IAM com SHA-256 e depois em base64.

      img_2.png

    • A criptografia de assinatura será usada no CABEÇALHO completo da Autorização.

      img_3.png

    • Este é o código de validação de token do Oracle Identity Cloud Service OAUTH2. Você precisa configurar o arquivo config.json com os parâmetros do aplicativo Oracle Identity Cloud Service.

      img_13.png

    • Este é o início da função e inicializa algumas informações da segurança do OCI IAM e das variáveis do OCI Streaming criadas para esta implantação de API (streaming_host e oci_region).

      img_4.png

    • Esta é a parte principal desta função, existem duas partes.

      Na primeira parte, obtemos o token passado na solicitação do Gateway de API. Depois disso, chamamos a função auth_idcs() para validar o token no Oracle Identity Cloud Service. Antes de gerar a string draft-cavage-http-signatures-08, validamos o token do Oracle Identity Cloud Service. Se não for um token válido, a resposta fornecerá um erro 401 não autorizado.

      Na segunda parte, criaremos dois valores. A data (d) com o formato de data será usada na criação da assinatura (a). O rdata construirá a resposta para a função com os valores de autorização e data que serão usados pelo OCI API Gateway para autenticação no OCI Streaming.

      img_15.png

    • Aqui podemos gerar um log na Observabilidade do OCI e essa etapa é opcional. Informe o OCID (Oracle Cloud Identifier) do log. Você precisa criar um Log Personalizado anteriormente.

      Observação: Para criar um log personalizado no OCI Observability, consulte Usar OCI API Gateway, Functions e Observability para Validar o Conteúdo JSON e Monitorar Cabeçalhos e Corpo da API.

      img_6.png

    • Esta é a etapa final e retorna com uma autenticação válida.

      img_7.png

    Estas são as bibliotecas requirements.txt que precisarão ser carregadas nesta função (fn).

    requirements.txt
    ---------------------
    fdk>=0.1.54
    requests
    oci
    cryptography
    six
    PyJWT
    py3_lru_cache
    simplejson
    

    Este é o arquivo config.json.

    img_14.png

    E este é o arquivo de configuração do OCI. Você pode copiar esse arquivo da instalação da CLI do OCI, mas é importante modificar a seção key_file e remover o caminho da instalação da CLI do OCI. Isso será usado no código Python para gerar a string criptográfica draft-cavage-http-signatures-08.

    img_16.png

    Antes de implantar a função, crie duas variáveis e preencha com os valores OCID do OCI Streaming e região do OCI como este.

    fn config app <function-app> streaming_host ocid1.stream.oc1.iad.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxqhgw275qp7a
    fn config app <function-app> oci_region us-ashburn-1
    

    Implante sua função e vamos configurá-la no Gateway de API do OCI.

Tarefa 3: Configurar uma Implantação do Gateway de API

Observação: desenvolva uma função e chame-a no OCI API Gateway. Consulte OCI Functions: Validate an API Key with API Gateway.

  1. Configure seu serviço OCI API Gateway. Neste exemplo, configuraremos um serviço OCI Streaming. Em informações básicas, digite o Prefixo de caminho como /20180418/streams/ mais o OCID da sua instância de streaming.

    Por exemplo: /20180418/streams/ocid1.stream.oc1.iad.xxxxxxxxxxxxxxxxxxxxxxxxxxxx

    img.png

  2. Na Autenticação, selecione Autenticação Única e Função do Autorizador. Selecione o compartimento e o Oracle Function como get-authorization.

    img.png

  3. Configure os parâmetros HEADERs da sua solicitação.

    Header Parameter 1
    Context table=request.headers
    Header name=Date
    Argument name=Date
    
    Header Parameter 2
    Context table=request.headers
    Header name=token
    Argument name=token
    
  4. Para configurar o HEADER para parâmetros do Oracle Identity Cloud Service, clique em Mostrar políticas de solicitação de rota.

    img.png

  5. Nas transformações HEADER, clique em Editar e digite Comportamento para Overwrite em ambos os parâmetros, Nome do cabeçalho como Authorization, Date e Valores como ${request.auth[authorization]} e ${request.auth[date]} respectivamente. ${request.auth[authorization]} e ${request.auth[date]} são os valores retornados pelo código Python da função e serão passados como HEADERs para o serviço de backend.

    img.png

Tarefa 4: Configurar o Grupo e as Políticas do OCI

Para configurar as políticas do OCI Streaming, consulte Políticas do OCI Streaming e você pode usar políticas comuns. Consulte Políticas Comuns.

Tarefa 5: Testar a API

Vamos simular sua solicitação de aplicativo OAuth2 para seu Serviço de Implantação de Modelo no OCI Streaming.

  1. Obtenha o token e passe o ID do Cliente e o Segredo do Cliente para o provedor do Oracle Identity Cloud Service.

    Verb: POST
    URL: https://idcs-xxxxxxxxxxxxxxxxxxxxxxx.identity.oraclecloud.com/oauth2/v1/token
    BODY (x-www-form-urlencoded):
    scope: xxxxxxxxxxxxxxxxxxx.apigateway.us-ashburn-1.oci.customer-oci.com/super-scope
    grant_type: client_credentials
    HEADER
    Authorization: clientID:clientSecret\*
    
    - convert your clientID:clientSecret to a base64 value
    

    img_2.png

  2. Teste a solicitação ao Gateway de API do OCI. Informe seu ponto final de implantação do Gateway de API e selecione POST para sua solicitação REST. Você precisa declarar seis CABEÇADORES no CORPO do seu pedido.

    Content-Type: application/json
    access-control-allow-origin: *
    access-control-allow-method: POST,PUT,GET,HEAD,DELETE,OPTIONS
    access-control-allow-credentials: true
    Date: put an actual date in this format -> Thu, 21 Dec 2023 13:53:59 GMT
    token: put your <access_token> here*
    
    * Remember that your token have 1 hour duration.
    

    img_9.png

    E aqui está o resultado.

    img_11.png

    Nos Logs, você pode ver os payloads da lógica de autorização de código personalizado.

    img_8.png

Confirmações

Mais Recursos de Aprendizagem

Explore outros laboratórios em docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal Oracle Learning YouTube. Além disso, visite education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.

Para obter a documentação do produto, visite o Oracle Help Center.