Configurar Aplicações no Oracle Identity Cloud Service

Para que a autenticação funcione de forma adequada, você deve usar a mesma instância do Oracle Identity Cloud Service que protege seu Oracle Fusion Applications Cloud Service e Oracle PaaS ( Oracle Visual Builder ) ou aplicativo HTML5 personalizado. No Oracle Identity Cloud Service, você precisa criar uma aplicação a ser usada para a autenticação do cliente.

Neste cenário, separamos os assuntos do Oracle Functions mais Oracle API Gateway da interação entre as entidades do Oracle Functions e do Oracle Fusion Applications Cloud Service, protegendo ambos usando o Oracle Identity Cloud Service como entidades separadas, em vez de usar o mesmo Aplicativo Oracle Identity Cloud Service para ambos.

Em geral, as aplicações de extensão Oracle SaaS escritas por clientes da Oracle executam alguma lógica complexa. Por exemplo, um cenário comum é obter dados do Oracle Fusion Applications Cloud Service, processá-los de alguma forma e retornar dados para o Oracle Fusion Applications Cloud Service para outro alvo, como um banco de dados.

Consequentemente, temos aqui uma arquitetura com duas aplicações do Oracle Identity Cloud Service:

  • Uma aplicação que protege o Oracle Functions como recurso e como um cliente confiável do Oracle Fusion Applications Cloud Service.
  • Uma aplicação que protege a instância do Oracle Fusion Applications Cloud Service como um recurso.

As instruções deste artigo vão orientá-lo durante o processo de criação e configuração do primeiro desses aplicativos, para proteger o Oracle Functions. O segundo dos dois aplicativos já deverá existir: você era solicitado a criar e configurar um aplicativo para ativar a federação entre o Oracle Fusion Applications Cloud Service e o Oracle PaaS.

Esta configuração permite que você configure diferentes regras ou políticas para acessar Funções que não sejam as regras ou políticas de um Cliente Confiável para alcançar o Oracle Fusion Applications Cloud Service. Nesta configuração, o token de acesso de entrada ao Gateway de API só requer acesso autorizado ao Oracle Functions para chamar o recurso Função, mas não necessariamente precisa ter as mesmas concessões necessárias para acessar a instância do Oracle Fusion Applications Cloud Service. O aplicativo Oracle Visual Builder requer um Aplicativo Oracle Identity Cloud Service associado que gerará o token de acesso para acessar o Gateway de API. Este Aplicativo Oracle Identity Cloud Service será o cliente do Recurso de Gateway de Funções/API.

As trocas de tokens mostradas no diagrama de arquitetura fornecem uma camada de proteção adicional para propagar a identidade para o caso de uma Função ser um cliente de um Recurso Oracle Fusion Applications Cloud Service, que é semelhante ao processo de asserção do Oracle WebLogic OAuth com o Oracle Identity Cloud Service usado nas extensões SaaS mais antigas suportadas, como aquelas que usam o Oracle Java Cloud Service.

Isso pode significar que, em determinados casos de uso, o aplicativo Oracle Identity Cloud Service usado para gerar o token do Oracle Functions só pode ter escopos de recursos para Funções, mas não para o Oracle Fusion Applications Cloud Service. Nesse caso, o Oracle Functions não terá a capacidade de reutilizar o token para chamar o Oracle Fusion Applications Cloud Service, mas é válido para atingir o Oracle Functions. Portanto, você pode implementar fluxos lógicos nos quais alguns usuários ou grupos de Funções não têm acesso, enquanto outros não têm, com base na lógica de negócios, atribuições de usuário e privilégios ou em outros critérios.

Em outros casos de uso, o Oracle Functions pode incluir código para solicitar um token de acesso ao Oracle Fusion Applications Cloud Service usando os certificados e o usuário transmitido na solicitação do Gateway de API.

Criar um Aplicativo para o Oracle Functions no Oracle Identity Cloud Service

No Oracle Identity Cloud Service, você precisa criar uma aplicação confidencial para usar para a autenticação do cliente Oracle Functions.

Na mesma instância do Oracle Identity Cloud Service que você federau com sua instância do Oracle Fusion Applications Cloud Service, crie um aplicativo confidencial e certifique-se de que a configuração do cliente esteja configurada para que ela permita as concessões Credenciais do Cliente, Asserção JWT e Proprietário do Recurso.

  1. Acesse o Oracle Cloud My Services, clique em Usuários e, em seguida, clique em Console de Identidades.
  2. Selecione a guia Aplicativos e clique em Adicionar. Em seguida, clique em Aplicativo Confidencial.
  3. Na página Detalhes do assistente Adicionar Aplicação Confidencial, forneça um nome à nova aplicação. Se quiser, você poderá definir outros valores, como descrição, ícone, definições de exibição e tags. Clique em Próximo.
  4. Na página Cliente, selecione Configurar este aplicativo como cliente agora.
    Opções adicionais aparecem na página. Defina esta forma:
    • Tipos de Concessão Permitidos: Selecione Proprietário do Recurso, Credenciais do Cliente e Asserção JWT.
    • Ativar Permissão de URLs que não são HTTPS.
    • Você não precisa de um URL de redirecionamento para esse caso de uso.
    • Tipo de Cliente: deixe a opção Confidencial selecionada.
  5. Na seção Recursos, selecione Registrar Recursos. Defina o valor de Público-alvo Principal para o nome de host da instância do Gateway de API gerado na Console do Oracle Cloud Infrastructure quando você criou a instância de Gatway de API.
    No Oracle Cloud Infrastructure, você pode selecionar seu gateway, selecionar a guia Informações do Gateway e o Nome do Host da instância será exibido na guia.
  6. Em Escopos, clique para adicionar um escopo e adicionar um valor para o url base de sua implantação que usa a política de autorização JWT de Gateway de API. Por exemplo, /saasextension.
    Você usará esse escopo para permitir que o aplicativo acesse os recursos do Oracle Functions. Você pode adicionar escopos adicionais para recursos adicionais, conforme necessário.
  7. Você não precisa conceder acesso às APIs de administração.
  8. Clique em Próximo para ir até a página Recursos e, em seguida, clique em Próximo novamente para ir até a página Autorização.
  9. Na página Autorização, clique em Finalizar.
    A notificação Aplicativo Adicionada é exibida, com seu ID de Cliente e Segredo do Cliente. Anote esses itens para uso posterior. Quando você descarta a notificação, o aplicativo é mostrado.
  10. Clique no botão Ativar à direita do nome do aplicativo.

Preparar e Testar o Seu Aplicativo Oracle Identity Cloud Service

Configure a aplicação Confidencial do Oracle Identity Cloud Service para se conectar à aplicação correspondente à sua instância do Oracle Fusion Applications Cloud Service e, em seguida, teste a aplicação.

Neste procedimento, você configurará os Recursos do aplicativo Oracle Identity Cloud Service recentemente criado para adicionar um Escopo para o aplicativo Oracle Fusion Applications Cloud Service e, em seguida, verificar se uma conta de usuário autorizada do sistema Oracle PaaS pode obter um token para sua instância do Oracle Fusion Applications Cloud Service.
  1. Acesse o Oracle Cloud My Services, clique em Usuários e, em seguida, clique em Console de Identidades.
  2. Selecione a guia Aplicativos, localize e selecione o aplicativo que você acabou de criar para o Oracle Functions.
  3. Edite a Política de Emissão de Token. Definir Recursos Autorizados como Todos.
  4. Adicione um Recurso para o Oracle Applications Cloud (Fusion), com o Escopo do Fusion Application (ele não precisa ser Protegido).
  5. Verifique se você tem uma conta de usuário existente no Oracle PaaS e Oracle Fusion Applications Cloud Service, com privilégios suficientes para acessar os dados que você consulta usando uma chamada de API do REST. Por exemplo, a atribuição Administrador de Vendas pode ser suficiente.
  6. Teste o aplicativo gerando um token de acesso usando essas credenciais de usuário. Você pode gerar o token de acesso usando o recurso Token de Solicitação Postman especificando como o escopo, o valor Público Principal do recurso protegido do Oracle Identity Cloud Service Oracle Fusion Applications Cloud Service Application OAuth. Para este teste simples, use as credenciais de senha como o Tipo de Concessão para usar o nome de usuário como assunto no token gerado. (Em um ambiente de produção, você usaria as Credenciais do Cliente onde o cliente fornecerá as informações do usuário.) O URL do token de acesso é formado pela utilização do URL do host do Oracle Identity Cloud Service e pela anexação /oauth2/v1/token. Por exemplo, https://<sua nuvem de identidade hostname.identity.oraclecloud.com>/oauth2/v1/token.
Se tudo estiver funcionando corretamente, você deverá receber um token JWT como uma resposta, que poderá então usar em uma chamada para o ponto final REST API Oracle Fusion Applications Cloud Service e receber a mesma saída. Por exemplo:
curl --location --request GET 'https://<your fusion instance>.<domain>.com/fscmRestApi/resources/11.13.18.05/expenses' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <JWT_TOKEN>'
Essa consulta curl deve retornar dados de Despesas.

Configurar o Aplicativo Oracle Functions Oracle Identity Cloud Service como Cliente Confiável

Você precisa de um certificado a ser usado pela aplicação Oracle Identity Cloud Service como um Cliente Confiável para fazer solicitações OAuth ao seu Oracle Functions. É possível gerar um certificado autoassinado para uso durante o desenvolvimento, se você ainda não tiver um certificado disponível.

O script fornecido genSelfSignedKeypair.sh pode ser usado para gerar uma chave se você ainda não tiver uma. Execute o script especificando os valores de alias de tenant e chave. Neste exemplo, fornecemos o mytenant como o nome do tenant e fnassertionkey como o apelido da chave.

  1. Se necessário, use o script fornecido com as amostras de código para esta solução para gerar um certificado:
    $ ./genSelfSignedKeypair.sh --tenant mytenant  --keyalias fnassertionkey
    ==============================================
    Generating Self Signed Certificates in Kesytore
     
     
    General Properties:
    -------------------------------
    ==> Workdir: ./genCertsDir
    ==> Tenant Name: mytenant
    ==> Key Alias: fnassertionkey
     
    Keystore Properties:
    -------------------------------
    ==> Store Type: PKCS12
    ==> Key Algorithm: RSA
    ==> Key Size: 2048
    ==> Validity time(days): 1825
    ==> Sign Algorithm: SHA256withRSA
    ==> dname: CN=mytenant FN Assertion, O=mycompany, L=mylocation, ST=mystate, C=mycountry
     
    Passwords:
    [*] Keystore Password:
    [*] PrivateKey Password:
     
    Generate keypair in keystore ./genCertsDir/mytenant-keystore.p12 ...
    Generating 2,048 bit RSA key pair and self-signed certificate (SHA256withRSA) with a validity of 1,825 days
        for: CN=mytenant FN Assertion, O=mycompany, L=mylocation, ST=mystate, C=mycountry
    [Storing ./genCertsDir/mytenant-keystore.p12]
    Export public certificate with alias fnassertionkey from generated keystore (openssl) ...
    Certificate stored in file <./genCertsDir/mytenant-fnassertionkey-cert.pem>
    Extract Private Key in PKCS8 format from generated keystore (openssl) ...
    Self Signed certificate generated successfully
    ==============================================
    Files generated:
    ==> ./genCertsDir/mytenant-keystore.p12
    ==> ./genCertsDir/mytenant-fnassertionkey-cert.pem [Stored in Keystore]
    ==> ./genCertsDir/mytenant-fnassertionkey-pkcs8-key.pem [Stored in Keystore]
    ==============================================

    Os arquivos gerados serão usados no código da Função e na configuração do Aplicativo Oracle Identity Cloud Service:

    • mytenant-keystore.p12: Área de armazenamento de chaves gerada para uso em seu código para extrair os certificar usados para o processo de asserção.
    • mytenant-fnassertionkey-cert.pem: certificado público para uso na configuração do Aplicativo Oracle Identity Cloud Service.

    O terceiro arquivo pem não é imediatamente necessário, mas uma versão semelhante será extraída do armazenamento de chaves mytenant-keystore.p12 em seu código e será exportada para referência:

    • mytenant-fnassertionkey-pkcs8-key. pem: Uma Chave Privada no Formato PKCS8
  2. Configure seu aplicativo Oracle Functions Oracle Identity Cloud Service com o Tipo de Cliente Confiável e adicione um certificado usando o alias da chave do certificado. Acesse o Oracle Cloud My Services, clique em Usuários e, em seguida, clique em Console de Identidades.
  3. Selecione a guia Aplicativos e selecione o aplicativo Oracle Identity Cloud Service que você criou anteriormente para o acesso ao Oracle Functions.
  4. Na seção Configuração do Cliente, localize o campo Certificado, informe o alias usado para o seu certificado (no exemplo acima dele era fnassertionkey) e clique no botão Importar para importar o arquivo mytenant-fnassertionkey-cert.pem.

Importar Informações da Área de Armazenamento de Chaves para o Oracle Cloud Infrastructure Vault

O processo de asserção com o Oracle Functions exigirá o uso da área de armazenamento de chaves e das senhas importadas. Para obter a melhor segurança e evitar o uso de senhas e segredos, você pode aproveitar o Oracle Cloud Infrastructure Vault.

O serviço Oracle Cloud Infrastructure Vault permite criptografar e armazenar dados confidenciais de forma segura. Você pode armazenar suas senhas de chave pública e de armazenamento de chaves em um Vault e depois fazer referência a ela usando o Oracle Cloud Infrastructure SDK no seu Oracle Functions Backend para executar a associação. Você também pode criptografar e armazenar com segurança o arquivo JKS.

Na seção Antes de Começar desse playbook de solução, você era solicitado a configurar o ambiente do Oracle Functions, como usando os Guias de Início Rápido. A configuração do Guia de Início Rápido solicita a criação de uma Política de Funções no nível de Compartimento raiz. No exemplo a seguir, essa política se chama FnTenancyPolicy. Você precisa adicionar mais instruções à política para permitir que o Oracle Functions acesse o Vaults associado a essa política. O nome do Grupo para o Oracle Functions a ser usado deve ser aquele criado ao configurar a tenancy no Guia de Início Rápido. Neste exemplo, fnGroup1 é o Grupo de usuários que podem usar o Oracle Functions.

  1. Na console do Oracle Cloud Infrastructure, em Governança e Administração, vá para Identidade e clique em Políticas.
    É exibida uma lista das políticas no compartimento que você está exibindo.
  2. Selecione o compartimento raiz na lista à esquerda.
  3. Selecione o nome da sua política do Oracle Functions, como FnTenancyPolicy, e clique em Editar Instruções da Política. Adicione as seguintes instruções:
    allow group fnGroup1 to manage secret-family in tenancy
    allow group fnGroup1 to manage vaults in tenancy
    allow group fnGroup1 to manage keys in tenancy
  4. Selecione Salvar Alterações.
  5. Crie uma instância do Vault em seu compartimento.
    1. No grupo Governança e Administração, vá para Segurança e selecione Vault.
    2. Em Escopo da Lista, na lista Compartimento, selecione o nome do compartimento no qual você deseja criar o vault e clique em Criar Vault.
    3. Na caixa de diálogo Criar Vault, clique em Nome e, em seguida, informe um nome para exibição para o vault. Evite digitar qualquer informação confidencial neste campo.
    4. Se preferir, faça com que o vault virtual privado marque a caixa de seleção Tornar um vault virtual privado.
    5. Selecione Criar.
  6. Crie uma instância de Chave associada aos Secretos.
    1. Em Escopo da Lista, na lista Compartimento, selecione o nome do compartimento no qual você deseja criar a chave e, em seguida, clique no nome do vault que você acabou de criar.
    2. Selecione Chaves e, em seguida, Criar Chave.
    3. Na caixa de diálogo Criar Chave, escolha um compartimento na lista Criar no Compartimento. (Chaves podem existir fora do compartimento no qual o vault está.)
    4. Selecione Nome e informe um nome para identificar a chave. Evite digitar qualquer informação confidencial neste campo.
    5. Especifique o tamanho da chave, em bits, escolhendo um tamanho na lista Formato da Chave: Tamanho.
    6. Quando terminar, clique em Criar Chave.
  7. Crie os segredos necessários para seu caso de Asserção:
    1. Senha do Armazenamento de Chaves
    2. Senha da Chave Primária
    3. Arquivo da área de armazenamento de chaves
    Você precisará adicionar uma representação Base64-encoded do conteúdo do arquivo da Área de Armazenamento de Chaves. Você pode gerá-lo com o comando openssl:
    openssl base64 -in <YourKeystoreName>.p12 -out ksBase64Encoded.txt | cat ksBase64Encoded.txt

    Copie o conteúdo para o valor da chave no Segredo. Para criar um novo Segredo:

    1. Em Escopo da Lista, na lista Compartimento, selecione o nome do compartimento no qual você deseja criar um segredo.
    2. Na lista de vaultos no compartimento, selecione o nome do vault que você acabou de criar.
    3. Selecione Secretos e Criar Segredo.
    4. Na caixa de diálogo Criar Segredo, escolha um compartimento na lista Criar no Compartimento. (Secretos podem existir fora do compartimento no qual o vault está.)
    5. Selecione Nome e informe um nome para identificar o segredo. Evite digitar qualquer informação confidencial neste campo.
    6. Selecione Descrição e informe uma breve descrição do segredo para ajudar a identificá-lo. Evite digitar qualquer informação confidencial neste campo.
    7. Escolha a chave mestra de criptografia que você deseja usar para criptografar o conteúdo secreto enquanto ele é importado para o vault. (A chave deve pertencer ao mesmo vault.)
    8. Especifique o formato do conteúdo secreto que você está fornecendo escolhendo um tipo de modelo na lista Modelo do Tipo Secreto. (Você pode fornecer conteúdo secreto em texto sem formatação ao usar a Console para criar uma versão secreta ou secreta, mas o conteúdo secreto precisa ser o base64-encoded antes de ser enviado ao serviço. A Console automaticamente codifica o conteúdo secreto de texto sem formatação se você escolher este formato.)
    9. Selecione Conteúdo Secreto e informe o conteúdo secreto. (O tamanho máximo permitido para um pacote secreto é de 25 KB.)
    10. Opcionalmente, você pode aplicar uma regra para gerenciar o modo como os segundos são usados. Você pode criar uma regra em relação à reutilização do conteúdo secreto nas versões de um segredo ou criar uma regra especificando quando o conteúdo secreto expirará.
    11. Quando terminar, selecione Criar Segredo.
    12. Repita essas etapas para cada segredo que você precisa criar.
  8. Criar um Grupo Dinâmico:
    1. Na console, selecione Identidade e, em seguida, Grupos Dinâmicos.
      Uma lista dos grupos dinâmicos em sua tenancy é exibida.
    2. Selecione Criar Grupo Dinâmico.
    3. Informe um nome para o grupo dinâmico. Registre o nome para uso futuro. O nome deve ser exclusivo em todos os grupos em sua locação. Não é possível alterar este nome posteriormente.
    4. Informe uma descrição. Você não pode alterar a descrição mais tarde usando a console, mas poderá alterá-la usando a API.
    5. Na seção Regras de Correspondência, informe a seguinte regra (use o OCID do seu compartimento):
      ALL { resource.type = 'fnfunc', resource.compartment.id = 'ocid1.compartment.oc1..xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'}
    6. Selecione Criar Grupo Dinâmico.
      A sintaxe da regra de correspondência é verificada, mas os OCIDs não são. Verifique se os OCIDs digitados estão corretos.
  9. Adicione uma instrução à Política que você criou para o Oracle Functions no nível de Compartimento raiz como parte do Guia de Início Rápido do Oracle Functions, para permitir que o grupo dinâmico recém-criado acesse seus Secretos.
    1. Em Governança e Administração, vá para Identidade e clique em Políticas.
      É exibida uma lista das políticas no compartimento que você está exibindo.
    2. Selecione o compartimento raiz na lista.
    3. Selecione o nome da sua política do Oracle Functions, como FnTenancyPolicy, e clique em Editar Instruções da Política. Adicione a seguinte instrução:
      allow dynamic-group your_fn_group to read secret-family in tenancy
Com os Segredos do Vault configurados, você pode usar os OCIDs de cada segredo para acessá-los usando o Oracle Cloud Infrastructure SDK. As propriedades V_KEYSTORE, V_KS_PASS e V_PK_PASS serão usadas nas funções de exemplo descritas posteriormente nesta solução.

Configure o Aplicativo Oracle Visual Builder no Oracle Identity Cloud Service

As aplicações Oracle Visual Builder têm uma Aplicação Oracle Identity Cloud Service associada, que é automaticamente configurada como Cliente Confiável. Você precisa configurar essa aplicação para que ela possa ser usada como um cliente do Recurso Oracle Functions.

Como parte da interação mostrada na arquitetura proposta, um aplicativo do Oracle Visual Builder associado a uma instância do Oracle Identity Cloud Service, federado com o Oracle Fusion Applications Cloud Service e conectado ao Oracle Functions, precisa ser capaz de gerar um token de acesso que possa atingir o Gateway de API e os Recursos do Oracle Functions (conforme definido pelo Escopo). Você deve configurar seu aplicativo Oracle Visual Builder no Oracle Identity Cloud Service para defini-lo como um cliente do Recurso que estende a funcionalidade do SaaS adicionando o escopo do novo aplicativo Oracle Functions criado.

Quando você cria um novo aplicativo no Oracle Visual Builder, um aplicativo Oracle Identity Cloud Service é criado automaticamente. Por exemplo, se você criar uma aplicação chamada TestSaaSExtensionFN, poderá navegar para a console do Oracle Identity Cloud Service e listar aplicações e encontrar uma aplicação chamada TestSaaSExtensionFN.

  1. Crie uma aplicação do Oracle Visual Builder.
  2. No Oracle Identity Cloud Service, navegue até o aplicativo correspondente ao seu novo aplicativo Oracle Visual Builder.
  3. Na seção Política de Emissão de Token, defina Recursos Autorizados como Específicos e use o botão Adicionar Escopo para adicionar um Recurso com o Escopo da sua instância do Gateway de API Oracle Functions.
    Se o URL de Redirecionamento for marcado como obrigatório no Aplicativo IDCS do VBCS, isso acontece porque, na Configuração do Cliente, a caixa de seleção Implícito nos Tipos de Concessão Permitidos é marcada. Nesse caso, você precisará fornecer um URL para sua aplicação Web do Oracle Visual Builder nesta entrada. Você poderá atualizar esses valores posteriormente, dependendo de suas necessidades.
Repita esse processo para adicionar o escopo de cada aplicativo do Oracle Visual Builder adicional no Oracle Identity Cloud Service que deve conseguir atingir o aplicativo Oracle Functions Gateway de API.