Trabalhando com CORS
O Compartilhamento de Recursos entre Origens (CORS) é um protocolo baseado em cabeçalho que permite ao JavaScript fazer solicitações em seu nome para acessar recursos em outro domínio. Configure o Cloud Gate para que ele ative CORS e imponha definições de CORS para o Cloud Gate em execução no App Gateway ou em domínios de identidades do IAM.
O CORS ajuda a impedir que o JavaScript desonesto (plantado em um site por invasores, por exemplo, usando anúncios) faça solicitações AJAX em seu nome. Solicitações fraudulentas do AJAX podem retirar dinheiro do seu banco ou fazer compras em seu nome em um site de compras on-line. Essas solicitações podem ser bem-sucedidas se você tiver atualmente uma sessão ativa com esses sites. CORS estipula que se um servidor não responder com o conjunto correto de Cabeçalhos de Resposta, o navegador não permitirá que o JavaScript veja (ou acesse) a resposta.
- domínio - por exemplo,
site1.oraclecloud.comchamaoracle.com - subdomínio - por exemplo,
site1.oraclecloud.comchamasite7.oraclecloud.com - porta - por exemplo,
site1.oraclecloud.comchamasite1.oraclecloud.com:3030 - protocolo - por exemplo,
https://site1.oraclecloud.comchamahttp://site1.oraclecloud.com
Uma Solicitação CORS é apresentada em duas formas: uma Solicitação CORS Simples ou uma Solicitação CORS Preflight.
Solicitação CORS Simples
- O método é um dos seguintes:
GETPOSTHEAD
- Os Cabeçalhos HTTP permitidos que podem ser adicionados manualmente à Solicitação CORS Simples são:
AcceptAccept-LanguageContent-LanguageContent-TypeDPRDownlinkSave-DataViewport-WidthWidth
- O
Content-Type, se definido, deve ser:application/x-www-form-urlencodedmultipart/form-datatext/plain
Solicitação CORS Preflight
Se a solicitação JavaScript não atender às características de uma Solicitação de CORS Simples, uma Solicitação de CORS de Preflight será enviada ao recurso localizado no outro domínio.
A Solicitação CORS de Preflight testa se a solicitação real pode ser enviada para esse recurso, incluindo cabeçalhos HTTP específicos na solicitação que contém os dados que resultaram no acionamento do fluxo de solicitação de pré-flight. Em outras palavras, se a Solicitação HTTP JavaScript especificou algum método/cabeçalhos na Solicitação HTTP que exigiu uma Solicitação CORS de Preflight, a Solicitação CORS de Preflight consultará o recurso para esse método/cabeçalhos para ver se o recurso aceita essa solicitação de domínio cruzado.
Propriedades e Atributos de Configuração do CORS do Cloud Gate
| Propriedade CORS | Descrição |
|---|---|
cloudGateCorsEnabled |
Propriedade booleana para ativar o suporte CORS do Cloud Gate para a tenancy. Esta definição deve ser configurada para: A ativação do flag O padrão é Melhores práticas. Configure |
cloudGateCorsAllowedOrigins |
A propriedade é uma Matriz de String que contém a lista de Origens CORS permitidas. O padrão é uma matriz vazia. Cada Solicitação CORS especifica sua origem ou origem no Cabeçalho de Solicitação de Origem. O valor do Cabeçalho de origem corresponde a esta lista. Se a Origem for correspondida, o Cloud Gate adicionará os Cabeçalhos CORS apropriados à sua resposta. Se a Origem não for correspondida, o Cloud Gate não retornará nenhum Cabeçalho de Resposta CORS - fazendo com que a resposta seja rejeitada pelo browser. Valores CORS permitidos no modelo de entrada:
Exemplos:
|
cloudGateCorsAllowNullOrigin |
Propriedade booleana para suportar cenários em que o navegador envia uma Origem "nula". Esta definição deve ser configurada para: O padrão é Uma Origem "nula" é enviada se a Solicitação CORS for proveniente de um arquivo no computador de um usuário ou se um servidor for redirecionado para outro servidor em resposta a uma Solicitação CORS. O navegador passa uma Origem "nula" quando considera a Origem "manchada". Para aumentar a segurança, por padrão, Origens "nulas" não são permitidas. Algumas Origens "nulas" são válidas. Os aplicativos que utilizam o Log-in de Fluxo do Browser do OpenID Connect (OIDC) do domínio de identidades verão Origens "nulas" enviadas para seus nós do Cloud Gate. Quando o Cloud Gate redireciona para o domínio de identidades, autoriza o ponto final a iniciar o Log-in do Browser do OIDC e quando o domínio de identidades redireciona a solicitação de volta para o Cloud Gate, a Origem será "nula". |
cloudGateCorsMaxAge |
Um inteiro que especifica o número de segundos que o cliente (navegador) pode armazenar em cache uma Resposta CORS Preflight. |
cloudGateCorsExposedHeaders |
A propriedade é um Array de String que lista os Cabeçalhos de Resposta que podem ser adicionados ao Cabeçalho de Resposta O padrão é uma matriz vazia. |
Configurando Definições de CORS do Cloud Gate em Domínios de Identidades
O Cloud Gate requer que você configure as seguintes definições em domínios de identidades para suporte de CORS (Compartilhamento de Recursos entre Origens).
isCorsAllowed no documento de Política da Camada Web fosse configurada como true, o Cloud Gate permitiria Solicitações CORS de pré-voo por meio de Aplicativos Protegidos. A versão mínima do Cloud Gate necessária é a 21.1.2.
Use o ponto final /admin/v1/Settings/Settings para configurar as definições de CORS. A solicitação é uma operação patch. Consulte Atualizar uma Definição para obter mais informações.
Workflows de Solicitação CORS Simples e de Pré-Viagem
Visão geral dos workflows de requisição CORS (Cross-Origin Resource Sharing).
Workflow da Solicitação CORS Simples
- A Solicitação é identificada como uma Solicitação CORS pela presença do Cabeçalho da Solicitação de Origem.
- Se necessário (por exemplo, expiração do cache), as definições CORS do Cloud Gate serão submetidas a download de domínios de identidades no serviço IAM.
- O Cloud Gate processa a solicitação - rejeitando a solicitação ou permitindo-a pelo servidor de aplicativos upstream.
- Antes de uma resposta ser retornada, o Cloud Gate impõe CORS conforme definido pelas definições de CORS do Cloud Gate.
- O Cloud Gate sempre garante que o Cabeçalho de Resposta Variado faça parte da Resposta - e contenha o Cabeçalho "Origem". Isso ocorre mesmo para solicitações não CORS.
- Se
cloudGateCorsEnabledforfalse, o processamento será interrompido aqui. A Resposta é retornada como está. - O Cloud Gate verifica se a Origem é permitida - usando a lista configurada de Origens Permitidas.
Se a Origem não for permitida, todos os Cabeçalhos de Resposta CORS suportados serão removidos da Resposta e o processamento será encerrado.
- O Cabeçalho de Resposta
Access-Control-Allow-Originé adicionado e configurado para o valor do Cabeçalho de Solicitação de Origem. - O Cabeçalho de Resposta
Access-Control-Allow-Credentialsé adicionado e configurado paratrue. - O
Access-Control-Expose-Headersé configurado para a interseção entre o valorcloudGateCorsExposedHeaderse a lista de Cabeçalhos que estão sendo retornados na Resposta. - As opções
Access-Control-Allow-Methods,Access-Control-Allow-HeaderseAccess-Control-Max-Age Response Headersforam removidas da Resposta.
- O Cloud Gate retorna sua Resposta.
O Cloud Gate substitui os Cabeçalhos Access-Control-Allow-Origin e Access-Control-Allow-Credentials Response se definidos pelo servidor de aplicativos de upstream.
Fluxo de trabalho Solicitação CORS de pré-voo
- A Solicitação é identificada como uma Solicitação CORS pela presença do Cabeçalho da Solicitação de Origem.
- Se necessário (por exemplo, expiração do cache), as definições CORS do Cloud Gate serão submetidas a download de domínios de identidades no serviço IAM.
- A Solicitação é identificada como uma Solicitação CORS Preflight pelo Método OPTIONS e pelo Cabeçalho da Solicitação
Access-Control-Request-Method- além do Cabeçalho da Solicitação de Origem. - Se
cloudGateCorsEnabledfortrue, a Solicitação poderá passar para o servidor de aplicativos upstream - para permitir que os aplicativos implementem CORS.Se
cloudGateCorsEnabledforfalse, a definição antiga da Política da Camada WebisCorsAllowedainda será respeitada - apenas mais tarde no processamento da solicitação. - Antes de a resposta ser retornada do Cloud Gate, o CORS é imposto conforme definido pelas definições de CORS do Cloud Gate.
- O Cloud Gate sempre garante que o Cabeçalho de Resposta Variado faça parte da Resposta - e contenha o Cabeçalho "Origem". Isso ocorre mesmo para Solicitações nonCORS.
- Se
cloudGateCorsEnabledforfalse, o processamento será interrompido aqui. A Resposta é retornada como está. - O Cloud Gate verifica se a Origem é permitida - usando a lista configurada de Origens Permitidas.
Se a Origem não for permitida, todos os Cabeçalhos de Resposta CORS suportados serão removidos da Resposta e o processamento será encerrado.
- O Cabeçalho de Resposta
Access-Control-Allow-Originé adicionado e configurado para o valor do Cabeçalho de Solicitação de Origem. - O Cabeçalho de Resposta
Access-Control-Allow-Credentialsé adicionado e configurado paratrue. - Se o servidor de aplicativos de upstream não tiver adicionado o Cabeçalho de Resposta
Access-Control-Allow-Methods, o Cloud Gate construirá seu valor da seguinte forma:- Se o Cabeçalho Permitir Resposta estiver incluído na Resposta, o Cloud Gate usará seu valor.
- Se o Cabeçalho da Solicitação
Access-Control-Request-Methodfor encontrado na Solicitação, o Cloud Gate usará seu valor.
- Se o servidor de aplicativos de upstream não tiver adicionado o Cabeçalho de Resposta
Access-Control-Allow-Headers, o Cloud Gate usará o valor do Cabeçalho de SolicitaçãoAccess-Control-Request-Headersna Solicitação, se ele estiver presente. - Se
cloudGateCorsMaxAgeestiver configurado para um valor maior que zero, o Cabeçalho de RespostaAccess-Control-Max-Ageserá adicionado e configurado para o valor de idade máxima. Se o valorcloudGateCorsMaxAgefor zero ou menor, nenhuma ação será tomada para o Cabeçalho de RespostaAccess-Control-Max-Age. - O Cabeçalho de Resposta
Access-Control-Expose-Headersfoi removido. Não se aplica a respostas de pré-voo.
- O Cloud Gate retorna sua Resposta.