Observação:

Personalize sua Segurança de API usando o OCI API Gateway e o OCI Functions

Introdução

Descubra a sinergia perfeita entre o Oracle Cloud Infrastructure (OCI) Functions e o OCI API Gateway para implementar um método de autenticação personalizado para suas APIs e como as funções podem recuperar argumentos do gateway de API.

Gateway de API do OCI

O serviço OCI API Gateway permite que você publique APIs com pontos finais privados acessíveis na sua rede e que você pode expor com endereços IP públicos se quiser que eles aceitem o tráfego da internet. Os pontos finais suportam validação de API, transformação de solicitação e resposta, CORS, autenticação e autorização e limitação de solicitação.

Usando o serviço OCI API Gateway, você cria um ou mais gateways de API em uma sub-rede regional para processar o tráfego de clientes de API e roteá-lo para serviços de backend. Você pode usar um único gateway de API para vincular vários serviços de backend (como OCI Load Balancer, instâncias do OCI Compute e OCI Functions) em um único ponto final de API consolidado.

Funções do OCI

O OCI Functions é uma plataforma Functions-as-a-Service totalmente gerenciada, multitenant, altamente escalável e sob demanda. Ela foi criada na OCI de nível empresarial e desenvolvida pelo mecanismo de código-fonte aberto Fn Project. Use o OCI Functions quando quiser se concentrar na gravação de código para atender às necessidades do negócio.

Observação:

Objetivo

Pré-requisitos

Tarefa 1: Configurar Grupos Dinâmicos

Faça log-in na Console do OCI, navegue até seu domínio, clique em Grupos Dinâmicos e crie grupos com as informações a seguir.

Tarefa 2: Criar Políticas

Vá para a Console do OCI, navegue até Políticas e crie políticas com as informações a seguir.

Tarefa 3: Criar um Registro de Contêiner do OCI

  1. Vá para a Console do OCI, navegue até Developer Services, Containers & Artifacts, selecione Container registry e clique em Create repository para criar um repositório privado para a imagem da função.

    • Nome do repositório: Digite functions/authorizationfunctionjava.

      criação do repositório

  2. Verifique os repositórios e anote o Namespace.

    namespace do repositório

  3. Abra o OCI Cloud Shell no qual você deve ter a CLI e o Docker do OCI instalados e continue com o log-in no registro. Verifique qual é o URL correto para sua região. Neste tutorial, estamos usando Leste do Brasil (São Paulo) em que o URL do registro é gru.ocir.io.

    docker login -u 'yourRepositoryNamespace/oracleidentitycloudservice/yourUserLogin' gru.ocir.io
    Password: YOUR_AUTH_TOKEN_CREATED_EARLIER
    

    login no docker

Tarefa 4: Criar um Java OCI Functions como uma Função de Autorizador

Observação: Certifique-se de selecionar sua sub-rede privada.

  1. Vá para a Console do OCI, acesse Developer Services, Functions, Applications e clique em Create application.

    criar aplicativo

  2. Inicie o OCI Cloud Shell no qual você tenha o Docker, a CLI do OCI e a CLI do Fn Project instalada e execute os comandos a seguir para inicializar a função.

    Observação: Se você tiver seguido as tarefas, o comando de log-in do Docker já deverá ter sido executado; caso contrário, prossiga com a etapa de log-in do Docker na Tarefa 3.

    Vá para a Console do OCI, acesse Developer Services, Functions, Applications, selecione seu aplicativo e clique em Getting started. Execute os comandos a seguir.

    fn list context
    fn use context sa-saopaulo-1
    fn update context oracle.compartment-id PASTE_YOUR_COMPARTMENT_OCID
    fn update context registry gru.ocir.io/PASTE_YOUR_REGISTRY_NAMESPACE/functions
    

    Observação: Neste tutorial, estamos usando a região Leste do Brasil (São Paulo). Se você estiver usando uma região diferente, será necessário alterar o local do registro.

  3. Faça download do código de amostra da função Java aqui: authorizationfunctionjava.tar e faça upload dele no OCI Cloud Shell e, em seguida, descompacte o arquivo.

    # check your file is there
    ls -lrt
    # create your directory
    mkdir authorizationfunctionjava
    # unzip the file
    tar -xvf authorizationfunctionjava.tar -C authorizationfunctionjava
    cd authorizationfunctionjava/
    

    descompactar arquivo tar

    Esse código Java simples recebe dois parâmetros token e customer. Ele também recupera um terceiro parâmetro de uma variável de ambiente do sistema definida na configuração da função.

    Observação: Certifique-se de que os nomes dos parâmetros no método handleRequest(Entrada de entrada) sejam iguais aos nomes usados na configuração do gateway de API. Isso garante que o gateway de API transmita corretamente os parâmetros para a função de autorizador.

    código java

    Este trecho de código valida a entrada e retorna uma resposta específica.

    validação

    resultado

    Para obter mais informações sobre o formato e os parâmetros de resposta necessários, consulte Criando uma Função de Autorizador.

  4. Execute o comando a seguir para criar o código e implantar a função.

    cd authorizationfunctionjava/
    ls -lart
    fn deploy --app chafikFunctions
    

    criar

    criar

  5. Crie várias configurações para armazenar as credenciais do cliente para testar a validação da função.

    Observação: essas variáveis de configuração são usadas como variáveis de ambiente do sistema dentro do código de amostra Java fornecido neste tutorial. No entanto, você pode modificar o código de função para usar uma abordagem alternativa, como o Fn RuntimeContext. Para obter mais informações, consulte Usando o Fn RuntimeContext com Funções.

    Nome/Chave do Segredo Valor
    FN_AAA_KEY 123,456
    FN_BBB_KEY 898,989
    FN_ORACLE_KEY ABCD1234
  6. Você pode configurar essas definições por meio da Console do OCI navegando até Developer Services. Em Funções, clique em Aplicativos, selecione seu aplicativo e, em seguida, selecione sua função. Na página de detalhes da função, clique em Configuração.

    configuração

    Ou

    Execute os comandos fn.

    fn config function --help
    
    MANAGEMENT COMMAND
    fn config function - Store a configuration key for this function
    
    USAGE
    fn [global options] config function <app-name> <function-name> <key> <value>
    
    DESCRIPTION
    This command sets the configuration of a specific function for an application.
    
    fn config function chafikFunctions authorizationfunctionjava FN_ORACLE_KEY ABCD1234
    
  7. Execute o comando a seguir para chamar a função.

    # Invoke the function to check if it's working as expected
    echo -n '{"data" : {"customer":"ORACLE", "token": "ABCD1234"}}' | fn invoke chafikFunctions authorizationfunctionjava
    

    Observação: A chamada inicial pode levar até um minuto para aquecer a função. Verifique a configuração para ver se há definições adicionais. Para obter mais informações, consulte Reduzindo a Latência Inicial Usando Simultaneidade Provisionada.

    Teste com dados válidos e inválidos para verificar as respostas da função.

    chamar função

Tarefa 5: Criar Gateway de API do OCI e uma API Simulada para usar a Função de Autorizador

Observação: Certifique-se de selecionar sua sub-rede pública.

  1. Vá para a Console do OCI, acesse Developer Services, API Management, Gateways e clique em Criar Gateway.

    criar aplicativo

  2. Vá para a página Detalhes do gateway e anote Nome do host.

    nome do host do gateway

  3. Crie uma implantação no gateway de API. Em Informações básicas, especifique as seguintes informações.

    • Prefixo do caminho: Digite /authFunction.

    Observação: Nome do Host e Prefixo do caminho do gateway de API serão usados para formar o ponto final da API.

    Informações Básicas

  4. Em Autenticação, especifique as informações a seguir.

    • Selecione Autenticação Única.

    • Selecione Função do Autorizador.

    • Aplicativo do Oracle Functions: Selecione o aplicativo criado na Tarefa 4.

    • Oracle Function: Selecione a função criada na Tarefa 4.

    • Selecione Função de autorizador de múltiplos argumentos.

    • Argumentos de função: especifique as seguintes informações.

      Tabela de contexto Nome do cabeçalho Nome do argumento
      request.headers cliente cliente
      request.headers token token

    Observação O Nome do cabeçalho refere-se às informações incluídas no cabeçalho da solicitação ao chamar o ponto final da API. O Nome do argumento é o nome do parâmetro enviado para a função de autorizador. Consulte o código Java na Tarefa 4.3

    autenticação única

    argumentos da função

  5. Em Rotas, crie uma única rota para um teste simulado com as informações a seguir.

    • Caminho: Digite /mock.
    • Métodos: Selecione GET.
    • Backend Option: Selecione Editar backend único adicionado.
    • Tipo de Backend: Selecione Resposta de estoque.

    rota

  6. Em Rotas, defina a Resposta do Modelo e clique em Próximo.

    • Código de status: Informe 200.
    • Corpo: Digite {"mensagem" : "ok"}.
    • Nome do cabeçalho: Selecione Content-Type.
    • Valor do Cabeçalho: Selecione application/json; charset=UTF-8.

    simulação

  7. Em Revisar, verifique a configuração e clique em Salvar Alterações para concluir a criação da implantação.

  8. Execute o comando curl para testar sua API.

    # Invoke using <Verb Defined in Route> with the endpoint like: <API Gateway Hostname> + <Deployment Path Prefix> + <Route Path>
    # Send parameters, such as customer and token, in the Header with values configured in Task 4 - Step 5
    curl -i -H "customer: AAA" -H "token: 123456" -X GET https://yourapigatewayhosta.your-region.oci.customer-oci.com/authFunction/mock
    

    chamar função

    Se a chamada com informações inválidas, a resposta será HTTP/1.1 401 Não Autorizado.

    401 status:

Tarefa 6: Usar o Gateway de API do OCI para Recuperar Parâmetros e Escopo das Funções do Autorizador

Observação Consulte o código Java baixado na Tarefa 4. Esta tarefa explica como trabalhar com result.context e result.scope no gateway de API.

  1. Recuperar valores de contexto das funções de autorizador.

    variável do contexto

    Considere um cenário em que você precise recuperar informações da função de autorizador e usá-las no gateway de API. Por exemplo, talvez você queira usar um token de autorização para chamar um serviço de backend.

    Observação: Nesta demonstração de laboratório, as informações são retornadas no cabeçalho de resposta.

  2. Vá para a Console do OCI, acesse Developer Services, API Management, Gateways e selecione seu gateway. Clique em Implantações, selecione a implantação criada na Tarefa 5 e clique em Editar.

    editar implantação

  3. Navegue até Rotas e clique em Mostrar políticas de resposta de rota.

    resposta da rota

  4. Em Políticas de Resposta, em Transformações de cabeçalho, clique em Adicionar para continuar.

    botão Adicionar

  5. Na página Transformações do cabeçalho de resposta, configure seu gateway de API conforme mostrado na imagem a seguir e clique em Aplicar Alterações.

    Ambos os parâmetros do código Java serão incluídos nos cabeçalhos de resposta da API.

    • Nome do cabeçalho: Este campo especifica o nome do atributo de cabeçalho na resposta da API.
    • Valores: Este campo especifica o nome do atributo recuperado da função de autorizador.

    Utilize o formato a seguir:

    ${request.auth[attributeNameFromAuthorizerFunction]}
    
    #examples
    ${request.auth[valor01]}
    ${request.auth[valor02]}
    

    configuração do cabeçalho

  6. Verifique a configuração da resposta do cabeçalho. Clique em Próximo para revisar as alterações e clique em Salvar Alterações para aplicar.

    configuração do cabeçalho de verificação

  7. Teste a API e examine os cabeçalhos de resposta.

    resposta do cabeçalho

  8. Vamos esclarecer como usar valores de escopo de uma função de autorizador para aumentar a segurança.

    Observação: No contexto da autorização, o escopo refere-se às permissões específicas ou aos níveis de acesso concedidos a um usuário ou aplicativo.

    variável do contexto

    A função de autorizador retorna todos os escopos disponíveis (no nosso exemplo, isto é hardcoded) para esta chamada de API.

    Para algumas Rotas em sua Implantação do Serviço API Gateway, talvez você queira permitir que apenas escopos específicos aprimorem a segurança.

    Vá para a Console do OCI, acesse Developer Services, API Management, Gateways e selecione seu gateway. Clique em Implantações, selecione a implantação criada na Tarefa 5 e clique em Editar.

    editar implantação

  9. Navegue até Rotas e clique em Mostrar políticas de solicitação de rota.

    solicitação de rota

  10. Em Políticas de Solicitação, em Autorização, clique em Editar.

    editar botão

  11. Em Política de autorização, selecione Qualquer um como Tipo de autorização, adicione todo o Escopo Permitido retornado pela função de autorizador e clique em Aplicar Alterações.

    política de autorização

  12. Em Revisar, revise suas alterações, clique em Próximo e, em seguida, clique em Salvar Alterações para aplicar suas modificações.

    política de autorização

  13. Teste a API e verifique se ela está funcionando. Os escopos são retornados pela função de autorizador.

    teste bem-sucedido

  14. Altere o gateway de API para usar um escopo não retornado pela função de autorizador.

    Revise suas alterações, clique em Próximo e, em seguida, em Salvar Alterações para aplicar suas modificações.

    falha no escopo

  15. Teste a API e verifique o resultado.

    política de autorização

    A resposta será um status http 404 Não Encontrado.

    Verifique se as funções do autorizador funcionam corretamente, uma vez que os dois cabeçalhos são retornados. No entanto, o backend de roteamento falha em decorrência da validação de autorização de escopo nas políticas de solicitação.

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.