Trabalhando com CORS
O Cross-Origin Resource Sharing (CORS) é um protocolo baseado em cabeçalho que permite que JavaScript faça solicitações em seu nome para acessar recursos em outro domínio. Configure o Cloud Gate para que ele ative o CORS e imponha definições de CORS para o Cloud Gate em execução nos domínios de identidades do App Gateway ou do IAM.
O CORS ajuda a impedir que JavaScript desonesto (plantado em um site por invasores, por exemplo, usando anúncios) faça solicitações AJAX em seu nome. Solicitações AJAX fraudulentas 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. O CORS estipula que, se um servidor não responder com o conjunto correto de Cabeçalhos de Resposta, o browser não permitirá que o JavaScript veja (ou acesse) a resposta.
- domínio - por exemplo,
site1.oraclecloud.com
chamaoracle.com
- subdomínio - por exemplo,
site1.oraclecloud.com
chamasite7.oraclecloud.com
- porta - por exemplo,
site1.oraclecloud.com
chamasite1.oraclecloud.com:3030
- protocolo - por exemplo,
https://site1.oraclecloud.com
chamahttp://site1.oraclecloud.com
Uma Solicitação CORS vem em duas formas: uma Solicitação CORS Simples ou uma Solicitação CORS Preflight.
Solicitação CORS Simples
- O método é um dos seguintes:
GET
POST
HEAD
- Os Cabeçalhos HTTP permitidos que podem ser adicionados manualmente à Solicitação de CORS Simples são:
Accept
Accept-Language
Content-Language
Content-Type
DPR
Downlink
Save-Data
Viewport-Width
Width
- O
Content-Type
, se definido, deverá ser:application/x-www-form-urlencoded
multipart/form-data
text/plain
Solicitação CORS de Preflight
Se a solicitação JavaScript não atender às características de uma Solicitação CORS Simples, uma Solicitação CORS de Preflight será enviada ao recurso localizado no outro domínio.
A Solicitação CORS de Pré-voo 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é-voo. Em outras palavras, se a Solicitação HTTP JavaScript tiver especificado alguns métodos/cabeçalhos na Solicitação HTTP que exigiram uma Solicitação CORS de Preflight, a Solicitação CORS de Preflight consultará o recurso para esses métodos/cabeçalhos para ver se o recurso aceita essa solicitação de domínio cruzado.
Propriedades e Atributos de Configuração CORS do Cloud Gate
Propriedade CORS | Descrição |
---|---|
cloudGateCorsEnabled |
Propriedade booliana para ativar o suporte CORS do Cloud Gate para a tenancy. Essa configuração deve ser configurada como: A ativação do flag O padrão é Melhores práticas. Configure |
cloudGateCorsAllowedOrigins |
A propriedade é um Array de String que contém a lista de Origens CORS permitidas. O padrão é um array vazio. Cada Solicitação CORS especifica sua origem ou origem no Cabeçalho da 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á Cabeçalhos de Resposta de 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". Essa definição deve ser configurada como: O padrão é Uma Origem "nula" será enviada se a Solicitação de CORS for proveniente de um arquivo no computador de um usuário ou se um servidor redirecionar para outro servidor em resposta a uma Solicitação de 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 no Fluxo do Browser do OpenID Connect (OIDC) do domínio de identidades verão Origens "nulas" enviadas ao(s) nó(s) do Cloud Gate. Quando o Cloud Gate redireciona para o ponto final de autorização do domínio de identidades para iniciar o Log-in no 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 de 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 é um array vazio. |
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 identidade para suporte ao CORS (Compartilhamento de Recursos entre Origens).
isCorsAllowed
no documento da 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 necessária do Cloud Gate é 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 Preflight
Visão geral dos fluxos de trabalho de solicitação de CORS (Compartilhamento de recursos entre origens).
Workflow de 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 são baixadas dos domínios de identidades no IAM.
- O Cloud Gate processa a solicitação - rejeitando a solicitação ou permitindo que ela passe para o servidor de aplicativos upstream.
- Antes de uma resposta ser retornada, o Cloud Gate impõe o CORS conforme definido pelas definições de CORS do Cloud Gate.
- O Cloud Gate sempre garante que o Cabeçalho Variar Resposta faça parte da Resposta - e contenha o Cabeçalho "Origem". Isso ocorre mesmo para solicitações não CORS.
- Se
cloudGateCorsEnabled
forfalse
, 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 retirados da Resposta e o processamento será encerrado.
- O Cabeçalho de Resposta
Access-Control-Allow-Origin
é adicionado e configurado com o valor do Cabeçalho de Solicitação de Origem. - O Cabeçalho de Resposta
Access-Control-Allow-Credentials
é adicionado e configurado emtrue
. - O
Access-Control-Expose-Headers
é configurado para a interseção entre o valorcloudGateCorsExposedHeaders
e a lista de Cabeçalhos que estão sendo retornados na Resposta. - As opções
Access-Control-Allow-Methods
,Access-Control-Allow-Headers
eAccess-Control-Max-Age Response Headers
são removidas da Resposta.
- O Cloud Gate retorna sua Resposta.
O Cloud Gate substituirá os Cabeçalhos Access-Control-Allow-Origin
e Access-Control-Allow-Credentials Response
, se definidos pelo servidor de aplicativos upstream.
Workflow de Solicitação CORS de Preflight
- 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 são baixadas dos domínios de identidades no IAM.
- A Solicitação é identificada como uma Solicitação CORS de 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
cloudGateCorsEnabled
fortrue
, a Solicitação poderá passar para o servidor de aplicativos upstream - para permitir que os aplicativos implementem o CORS.Se
cloudGateCorsEnabled
forfalse
, a configuração antiga da Política da Camada WebisCorsAllowed
ainda 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 Variada faça parte da Resposta - e contenha o Cabeçalho "Origem". Isso ocorre mesmo para Solicitações nonCORS.
- Se
cloudGateCorsEnabled
forfalse
, 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 retirados da Resposta e o processamento será encerrado.
- O Cabeçalho de Resposta
Access-Control-Allow-Origin
é adicionado e configurado com o valor do Cabeçalho de Solicitação de Origem. - O Cabeçalho de Resposta
Access-Control-Allow-Credentials
é adicionado e configurado emtrue
. - Se o servidor de aplicativos upstream não adicionou 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-Method
for encontrado na Solicitação, o Cloud Gate usará seu valor.
- Se o servidor de aplicativos 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-Headers
na Solicitação, se ele estiver presente. - Se
cloudGateCorsMaxAge
for configurado com um valor maior que zero, o Cabeçalho de RespostaAccess-Control-Max-Age
será adicionado e configurado com o valor de idade máxima. Se o valorcloudGateCorsMaxAge
for 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-Headers
foi removido. Não se aplica a respostas de pré-voo.
- O Cloud Gate retorna sua Resposta.