Observação:
- Este tutorial requer acesso ao Oracle Cloud. Para se inscrever em uma conta gratuita, consulte Conceitos Básicos do Oracle Cloud Infrastructure Free Tier.
- Ele usa valores de exemplo para credenciais, tenancy e compartimentos do Oracle Cloud Infrastructure. Ao concluir seu laboratório, substitua esses valores por valores específicos do seu ambiente de nuvem.
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:
-
Aplicativo em uma rede local conectada ao Oracle Cloud por meio de Fast-Connect/VPN.
-
O aplicativo precisa consumir um serviço OCI Streaming.
-
O serviço OCI não tem um mecanismo de autenticação que atenda às possibilidades do consumidor da aplicação.
-
O aplicativo precisa ser autenticado usando OAuth2 para poder acessar o serviço com segurança.
Portanto, o tutorial fornece a seguinte solução:
-
Configure o próprio Provedor de Identidades da nuvem do Oracle Identity Cloud Service para autenticação por meio de OAuth2.
-
Configure o OCI API Gateway para integração com o Oracle Identity Cloud Service para autenticação por meio de um token obtido.
-
Codifique uma função para produzir a autenticação do OCI Streaming (método
draft-cavage-http-signatures-08
). -
Crie grupos e políticas para limitar o acesso aos recursos da nuvem.
-
Forneça um Provedor de Identidades que permita transmitir o ID do Cliente e o ID do Segredo e obter um token de autenticação.
-
Forneça um serviço REST de Gateway de API funcional que se autentique por meio do token obtido e permita que o consumidor use os serviços OCI Streaming.
Observação: O código do OCI Functions pode ser baixado aqui: OAuthOCIService-fn.zip.
Objetivos
-
Permita que um aplicativo externo consuma serviços REST do OCI com autenticação OAuth2.
-
Fornecer um serviço de autenticação OAuth2 no OCI.
-
Configure o OCI API Gateway e o OCI Functions para executar serviços do OCI por meio de um token.
Pré-requisitos
-
Uma instância do OCI API Gateway criada e exposta à Internet. Para obter mais informações, consulte Criando Seu Primeiro Gateway de API no Oracle Cloud.
-
Conectividade de Rede entre o OCI API Gateway, o OCI Functions e o recurso OCI PaaS.
-
VCN/Sub-redes
-
Lista de segurança
-
Gateway NAT/Gateway de Internet
-
Redes públicas/privadas
-
-
Conhecimento do OCI Functions e da API REST do OCI para codificar uma chamada para o serviço OCI.
Tarefa 1: Configurar OAuth2 com o Oracle Identity Cloud Service
-
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.
-
-
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.
-
Na Console do OCI, vá para Identidade e Segurança e selecione Federação.
-
Clique em OracleIdentityCloudSevice.
-
Clique no link Console do Oracle Identity Cloud Service da sua instância do Oracle Identity Cloud Service.
-
Criaremos dois aplicativos. Clique em Aplicativos e Serviços.
-
Nos Aplicativos, clique em Adicionar.
-
Selecione Aplicativo Confidencial para iniciar a configuração do servidor de recursos.
-
Configuraremos o primeiro aplicativo. Informe um Nome no aplicativo do servidor de recursos e clique em Próximo.
-
Clique em Ir para mais tarde. Precisamos configurar apenas o recurso.
-
Informe o nome do host do Gateway de API obtido na Etapa 1.
-
Clique em Adicionar Escopo e especifique as informações do escopo.
-
Verifique as informações do escopo, clique em Próximo duas vezes e clique em Finalizar.
-
Clique em Ativar para ativar seu aplicativo.
-
-
Criar um Aplicativo Cliente.
-
Em Aplicativos, clique em Adicionar.
-
Selecione Aplicativo Confidencial para iniciar a configuração do servidor de recursos.
-
Informe um Nome para seu aplicativo e clique em Próximo.
-
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.
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
. -
Role para baixo e clique em Adicionar Escopo.
-
Localize seu aplicativo de recursos criado antes (
oauth_resource_server
) e clique em Adicionar. -
Você pode ver seu escopo adicionado ao seu aplicativo. Clique em Próximo.
Observação: Observe o valor do escopo; você precisará usá-lo para solicitar um token.
-
Ignore as janelas Recursos e Política da Camada Web. Em Autorização, selecione Impor Concessões como Autorização e clique em Finalizar.
-
Observe o ID do Cliente e as informações de Segredo do Cliente. Você precisará disso para obter seu token.
-
Clique em Ativar para ativar o aplicativo e seu autorizador OAuth2 está pronto para teste.
-
-
Obter um Token: Agora podemos testar o autorizador OAuth2 para obter o token.
-
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
. -
Você precisará do link do URL até
oraclecloud.com
, que é o ponto final raiz. Por exemplo,https://idcs-xxxxxxxxxxxxx.identity.oraclecloud.com
. -
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. -
Digite as credenciais como Autenticação Básica, ID do Cliente e Segredo do Cliente.
-
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.
-
Clique em Enviar, execute a solicitação
POST
e exiba o token.
-
Tarefa 2: Configurar o OCI Functions para chamar sua API do OCI SDK
-
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.
-
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.
-
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.
-
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.
-
A criptografia de assinatura será usada no CABEÇALHO completo da Autorização.
-
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. -
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
eoci_region
). -
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.
-
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.
-
Esta é a etapa final e retorna com uma autenticação válida.
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
.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áficadraft-cavage-http-signatures-08
.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.
-
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
-
Na Autenticação, selecione Autenticação Única e Função do Autorizador. Selecione o compartimento e o Oracle Function como
get-authorization
. -
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
-
Para configurar o HEADER para parâmetros do Oracle Identity Cloud Service, clique em Mostrar políticas de solicitação de rota.
-
Nas transformações HEADER, clique em Editar e digite Comportamento para
Overwrite
em ambos os parâmetros, Nome do cabeçalho comoAuthorization
,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.
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.
-
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
-
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.
E aqui está o resultado.
Nos Logs, você pode ver os payloads da lógica de autorização de código personalizado.
Links Relacionados
Confirmações
- Autor - Cristiano Hoshikawa (Engenheiro de Soluções da Equipe A do Oracle LAD)
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.
Integrate OCI Streaming with Other Authorization Methods Using OCI API Gateway
F91394-02
November 2024