Criar Implantações de Gateway de API

Com suas funções prontas, você pode integrar e testar o mecanismo de autenticação Nativa para validação JWT com o Oracle Identity Cloud Service.

Criar Implantação do Gateway de API com Validação JWT Nativa

Usando o recurso Validação JWT Nativa de Gateway Oracle Cloud Infrastructure, é possível adicionar uma Política de Autenticação baseada em JWT (Java Web Token) para sua implantação.

Este tipo de JWT permite que você especifique os dados necessários para executar a validação do Token de Acesso de entrada (via Cabeçalho ou Parâmetro). A política requer as seguintes informações:

  • Emissores Permitidos: Emissores de token. Vários servidores OAuth são suportados, mas neste caso, você usará https://identity.oraclecloud.com/.
  • Públicos-alvo: Os recursos que podem ser acessados para este token.
  • Chaves Públicas: o Conjunto de Chaves Web Json (JWKS) a ser usado para validar o token, dentro dos emissores e públicos. São permitidos dois tipos de JWKS:
    • Chaves Estáticas: Com essa opção, você precisa especificar o JWKS manualmente usando o formato JSON, que deve ter as propriedades necessárias de acordo com a Seção 7517 RFC 4.
    • Chaves Remotas: Com essa opção, você precisa especificar um URL do qual o JWKS poderá ser consumido com o uso do REST. Uma limitação desse recurso é que o URL especificado precisa estar desprotegido, pois no momento esse recurso não suporta a capacidade de ler URLs protegidos para recuperar o JWKS.
  • Opções Avançadas:
    • Desvio de Clow máximo em segundos: Se o Gateway de API e o Provedor de Identidades tiverem algumas diferenças no tempo, esse valor permite ajustar o tempo da janela de validade do token para tentar alinhar o tempo entre os dois serviços.
    • Reivindicações: para verificar as reivindicações, se necessário, do token de entrada. Por exemplo, client_id claim ou user_id claim.

Crie um novo nome de Implantação no Gateway de API com uma Rota para chegar à função criada nas etapas anteriores, usando o Ponto Final e a Validação JWT. Neste exemplo, a implantação se chama: my_jwt_test.

  1. Na console do Oracle Cloud Infrastructure, na página Gateway de API, selecione o gateway ativo clicando em seu nome.
  2. Em Recursos, selecione Implantações e, em seguida, selecione Criar Implantação.
  3. Configure a Política de Autenticação com os seguintes valores:
    • Tipo de Autenticação: JWT
    • Token de Autenticação: Cabeçalho
    • Nome do Cabeçalho: Autorização
    • Esquema de Autenticação: Detentor
    • Ativar Acesso Anônimo: ativado
  4. Adicione o domínio do Oracle Identity Cloud Service como um emissor permitido, para que você possa usá-lo como um gerador de token. Em Emissores, defina Emissores Permitidos como https://identity.oraclecloud.com/
  5. Adicionar um público-alvo. Defina um Público Permitido para o URL do seu Aplicativo do Oracle Identity Cloud Service Oracle Functions. Por exemplo, https://myinstance.apigateway.mydc.oci.customer-oci.com.
    Os Públicos-alvo a serem validados devem ser aqueles para os recursos que o token gerado precisa acessar. Nesse caso, esperamos que o token do Aplicativo Oracle Identity Cloud Service que é o cliente do proprietário do Recurso do Aplicativo Oracle Functions Oracle Identity Cloud Service, que tem como escopo de recurso o público principal do Aplicativo Oracle Functions Oracle Identity Cloud Service.
  6. Adicione o JWK a ser usado para validar o token JWT de entrada; remoto ou estático JWKS. Para adicionar um JWKS Remoto:
    1. Acesse a console do Oracle Identity Cloud Service.
    2. Selecione Configurações e Configurações Padrão.
    3. Se ainda não estiver ativado, selecione Acessar Certificado de Assinatura, clique em Salvar e, em seguida, clique em Sim.
    4. Acesse o URL do JWK da sua instância do Oracle Identity Cloud Service. Por exemplo: https://idcs-myinstance.identity.dc1.oraclecloud.com/admin/v1/SigningCert/jwk.
    5. Após a validação, você poderá ver o URL JWK, voltar ao Gateway de API e configurar as Chaves Públicas. Defina o Tipo como Remoto JWKS e defina o URI para o URL que acabou de validar.
  7. Para adicionar um JWKS estático:
    1. Defina o form Chave Estática. Para fazer isso, você precisa solicitar o JWK para o Oracle Identity Cloud Service. Você pode fazer isso com a curva. Por exemplo:
      ## Get access token to be able to invoke protected /admin/v1/SigningCert/jwk endpoint.
      # Clientid and ClientSecret should be from an existing IDCS Application in the stripe.
      #
      $ curl -X POST -u "<clientId>:<clientSecret>" https://idcs-myinstance.identity.dc1.oraclecloud.com/oauth2/v1/token -d "grant_type=client_credentials&scope=urn:opc:idm:__myscopes__"
       
       
      export jwtToken="<RETRIEVED_TOKEN>"
       
      ## Get JWK
      $ curl -X GET  https://idcs-myinstance.identity.dc1.oraclecloud.com/admin/v1/SigningCert/jwk -H "Authorization: Bearer ${jwtToken}"
       
      {
          "keys":[{
              "kty":"RSA",
              "x5t#S256":"<value>",
              "e":"<value>",
              "x5t":"<value>",
              "kid":"SIGNING_KEY",
              "x5c":["<value>"],
              "key_ops":["encrypt","verify","wrapKey"],
              "alg":"RS256",
              "n":"<value>"
          }]
      }
    2. Configurar as Chaves Públicas no Gateway de API. Defina o Tipo como Chaves Estáticas. Defina o ID da Chave como SIGNING_KEY e o Formato como Chave Web JSON. Cole em uma Chave Web JSON, usando apenas o subconjunto de valores obtidos da Oracle Identity Cloud Service.
      Somente determinadas propriedades da chave JWK são suportadas atualmente pelo Gateway de API. Em vez da propriedade key_ops, use a propriedade use.
      {
              "kty":"RSA",
              "e":"<value>",
              "kid":"SIGNING_KEY",
              "use":"sig",
              "alg":"RS256",   
              "n":"<value>"
      }
  8. Opcionalmente, você pode adicionar outras validações na seção Verificar Reivindicações. Adicione uma reivindicação client_id para permitir somente valores que correspondam ao Aplicativo Oracle Identity Cloud Service associado ao seu aplicativo Oracle Visual Builder. Se você tiver vários aplicativos do Oracle Visual Builder e os tokens do OAuth serão gerados usando vários Oracle Visual Builder Oracle Identity Cloud Service Apps, será necessário adicionar todos os IDs de clientes do Oracle Identity Cloud Service a esta etapa de verificação. Defina a Chave de Reivindicação como client_id, digite um ou mais Valores de Reivindicação e marque a caixa de seleção Obrigatório.
  9. Opcionalmente, você pode configurar o CORS para permitir solicitações dos domínios especificados. Por exemplo, você pode precisar permitir que os nomes de host do servidor Oracle Visual Builder sejam permitidos como origens de solicitações. Defina Origens Permitidas para os URLs de seus servidores, Cabeçalhos Expostos para Autorização, Cabeçalhos Permitidos para Autorização, Permitir Credenciais para Sim e Métodos Permitidos para GET, POST.
  10. Crie uma rota para apontar para sua função, como a amostra Função saasopportunitiesfn. Defina Caminho como /assertion/facall, Métodos para GET e POST, Tipo como Oracle Functions, certifique-se de que o Aplicativo no <seu compartimento> tenha o compartimento correto selecionado, defina o aplicativo com seu nome, como myapplication, e defina o Nome da Função como seu nome de função, como saasopportunitiesfn.
Depois de salvar suas alterações, você poderá revisar o conteúdo do payload my_jwt_test de Implantação de Gateway de API.

Testar Chamada REST do Ponto Final

Para testar a nova chamada REST de ponto final, você pode usar o recurso Obter Novo Token de Acesso do Postman.

Observe que, se você usar o token gerado nas etapas a seguir, você não poderá atingir pontos finais Oracle Fusion Applications Cloud Service diretamente, porque o token foi gerado com o Aplicativo Oracle Identity Cloud Service do Oracle Visual Builder e só poderá atingir o Oracle Functions com a configuração atual, de acordo com os Escopos que você configurou anteriormente. Além disso, se você usar um Aplicativo Oracle Identity Cloud Service diferente para gerar o token, e esse aplicativo não tiver as concessões para acessar o Escopo do Recurso Oracle Functions, o Gateway de API não permitirá a solicitação (retornará um erro 401) porque você adicionou o Público-alvo do Recurso Oracle Identity Cloud Service Oracle Functions. Se você tiver adicionado alegações de id do cliente, o Gateway de API garantirá que os tokens só correspondam aos do Oracle Identity Cloud Service Apps client_ids especificados.

Use os seguintes parâmetros para testar:

  • Tipo de Concessão: Credenciais de Senha - Este Tipo de Concessão é usado para garantir que o nome de usuário fornecido será o assunto no token gerado.
  • URL do Token de Acesso: URL do OAuth da sua instância do Oracle Identity Cloud Service. Por exemplo, https://idcs-myinstance.identity.dc1.oraclecloud.com/oauth2/v1/token.
  • Nome do Usuário: existe um usuário no Oracle Identity Cloud Service e no Oracle Fusion Applications Cloud Service com os privilégios apropriados em ambos.
  • Senha: Informe a senha deste usuário.
  • ClientId: o ID do Recurso Oracle Functions do Cliente Oracle Identity Cloud Service associado ao Oracle Visual Builder.
  • ClientSecret: o segredo do cliente do Recurso Oracle Functions do Cliente de Aplicativos Oracle Identity Cloud Service associado ao Oracle Visual Builder
  • Escopo: Este escopo deve corresponder aos Recursos fornecidos pelo Aplicativo Oracle Functions Oracle Identity Cloud Service. Por exemplo, https://myservice.apigateway.dc1.oci.customer-oci.com/saasextension
  1. Chame a rota configurada para apontar para sua função de asserter usando Postman e os parâmetros listados acima.
  2. Como alternativa, use curl. Por exemplo:
    curl --location --request GET 'https://myservice.apigateway.dc1.oci.customer-oci.com/saasextension/assertion/facall' \
    --header 'Authorization: Bearer <JWT_TOKEN>'
Você deve obter um resultado de qualquer uma das ferramentas, semelhante ao seguinte:
{
  "principal": "mary.jane",
  "gotPrincipalFrom": "BEARER",
  "statusCode": "200",
  "response": {
    "items": [],
    "count": 0,
    "hasMore": false,
    "limit": 25,
    "offset": 0,
    "links": [
      {
        "rel": "self",
        "href": "https://myfusionservice.fa.dc1.oraclecloud.com:443/fscmRestApi/resources/11.13.18.05/expenses",
        "name": "expenses",
        "kind": "collection"
      }
    ]
  }
}

Como opção, Criar Implantação do Gateway de API com Autenticação Personalizada

Use essa abordagem se optar por usar uma Função de Autenticação personalizada para validar o Token ao Portador para chamadas de entrada para Pontos Finais de Gateway de API.

Esta é a Função opcional que você definiu se seguiu os componentes da seção Opcionalmente Definir uma Função de Autenticação no Oracle Cloud Infrastructure.

  1. Para implantar o gateway de API, na página Gateway de API, selecione o gateway ativo clicando em seu nome.
  2. Em Recursos, clique em Implantações e em Criar Implantação.
  3. Usando o modo Totalmente Novo, você pode clicar no assistente para implantar o gateway de API.
    Como alternativa, você pode optar por Fazer Upload de um arquivo de definição de implantação, conforme descrito a seguir.

O snippet de código a seguir é um exemplo de arquivo JSON de especificação de implantação de API Oracle Cloud Infrastructure que você poderia usar para implantar em vez de usar o assistente. Dentro desse arquivo, podemos ver:

  • Linhas 1-8: Uma política de solicitação de autenticação. Esta é a definição que instrui que, para qualquer solicitação nesta implantação, primeiro chame esta função (functionId), informando o tokenHeader e, se retornar verdadeiro, então prossiga; caso contrário, responda com uma mensagem HTTP não autorizada.
  • Linhas 9-17: Uma definição CORS para gerenciar e controlar o compartilhamento de recursos de origem cruzada.
  • Linhas 18-43: Duas entradas de URL apontam/VERBs para funções individuais no FaaS.
{
    "requestPolicies": {
      "authentication": {
        "type": "CUSTOM_AUTHENTICATION",
        "isAnonymousAccessAllowed": true,
        "functionId": "OCID1.fnfunc.oc1.phx.xxxxxxxxxxxxxxx",
        "tokenHeader": "Authorization"
      }
      "cors":{ 
         "allowedOrigins": [<list-of-origins>], 
         "allowedMethods": [<list-of-methods>], 
         "allowedHeaders": [<list-of-implicit-headers>], 
         "exposedHeaders": [<list-of-exposed-headers>], 
         "isAllowCredentialsEnabled": <true|false>, 
         "maxAgeInSeconds": <seconds> 
      } 
    },
    "routes": [
      {
        "path": "/opportunities",
        "methods": [
          "GET"
        ],
        "requestPolicies": {},
        "backend": {
          "type": "ORACLE_FUNCTIONS_BACKEND",
          "functionId": "OCID1.fnfunc.oc1.phx.xxxxxxxxxxxxxxx"
 
        }
      },
      {
        "path": "/opportunities/{optyid}",
        "methods": [
          "PATCH"
        ],
        "requestPolicies": {},
        "backend": {
          "type": "ORACLE_FUNCTIONS_BACKEND",
          "functionId": "OCID1.fnfunc.oc1.phx.xxxxxxxxxxxxxxx"
        }
      }
    ]
  }
</seconds></true|false></list-of-exposed-headers></list-of-implicit-headers></list-of-methods></list-of-origins>