# Como utilizar a política CORS na Digibee Integration Platform

**CORS (Cross-Origin Resource Sharing)** é uma política de segurança implementada pelos navegadores da web que permite que um servidor restrinja quais origens podem acessar seus recursos por meio de solicitações HTTP.

É recomendado o uso do CORS sempre que um aplicativo web precisar fazer requisições HTTP para recursos localizados em um domínio ou porta diferente do onde o aplicativo está sendo hospedado. Isso ajuda a proteger o servidor contra ataques maliciosos que possam tentar acessar recursos indevidamente.

## Como funciona

Quando uma página da web faz uma requisição para um domínio diferente, o navegador enviará primeiro uma **solicitação de&#x20;*****Preflight*** para o servidor desse domínio. Nesta “requisição de teste”, o servidor envia um conjunto de cabeçalhos (headers) que indicam se a solicitação é permitida. Caso a solicitação seja permitida, o navegador enviará a solicitação real.

### Cabeçalhos (Headers)

Alguns dos cabeçalhos mais comuns usados ​​no CORS incluem:

* **Access-Control-Allow-Origin:** Especifica quais origens que tem permissão para acessar o recurso. Pode ser um valor único (valor: `*`), que permite que qualquer origem acesse o recurso, ou uma lista de domínios específicos.
* **Access-Control-Allow-Methods:** Especifica quais métodos HTTP são permitidos na solicitação de recurso (por exemplo, `GET`, `POST`, `DELETE`).
* **Access-Control-Allow-Headers:** Especifica quais cabeçalhos (headers) personalizados são permitidos na solicitação de recurso. É necessário para que um cabeçalho personalizado como `Authorization` possa ser enviado com a solicitação.
* **Access-Control-Expose-Headers:** Especifica quais cabeçalhos personalizados são expostos para a solicitação de recurso.
* **Access-Control-Allow-Credentials:** Especifica se o recurso pode ser acessado com credenciais (por exemplo, cookies, cabeçalhos de autorização, e assim por diante) pela solicitação de origem.

## CORS na Digibee Integration Platform

A política CORS está disponível para os triggers:

* [**HTTP**](https://app.gitbook.com/s/SKBJ6ZiEWBU93x170HH4/triggers/web-protocols/http)
* [**HTTP File (Download e Upload)**](https://app.gitbook.com/s/SKBJ6ZiEWBU93x170HH4/triggers/web-protocols/http-file)
* [**REST**](https://app.gitbook.com/s/SKBJ6ZiEWBU93x170HH4/triggers/web-protocols/rest)

Pode-se utilizar o CORS individualmente nos pipelines, ou pode ser configurado para todo o realm, através da [Configuração Global de CORS](https://app.gitbook.com/s/cO0A6g1dOsu8BiHYqO67/platform-administration/governance/policies/transformation/cors-http-header).

## Exemplo

### Configuração da política CORS no trigger do pipeline

Para este exemplo:

* O [**REST Trigger**](https://app.gitbook.com/s/SKBJ6ZiEWBU93x170HH4/triggers/web-protocols/rest) é configurado selecionando os métodos `GET` e `OPTIONS`.
* Durante a configuração, o CORS é ativado e os CORS headers definidos:
  * **Access-Control-Allow-Origin** para aceitar qualquer origem (valor: `*`).
  * **Access-Control-Allow-Methods** para aceitar apenas o método `GET`.
  * **Access-Control-Allow-Headers** para aceitar requisições que possam conter apenas os headers `Authorization`, `Content-Type` e `apikey`.

<figure><img src="https://content.gitbook.com/content/3ANg0NQQeslB7Og5K7Ah/blobs/bPq2lUsk3E2Bymxr7hvO/CORS_ExamplePT.png" alt=""><figcaption></figcaption></figure>

<details>

<summary>Exemplo 1: Requisição com sucesso (autorizado pelo navegador)</summary>

É efetuada uma requisição através do navegador Google Chrome, utilizando o método `GET`, e os headers `Content-Type` e `apikey`.

<figure><img src="https://content.gitbook.com/content/3ANg0NQQeslB7Og5K7Ah/blobs/73GJL2AvkDRWAQsJ1EW0/CORS2.png" alt=""><figcaption></figcaption></figure>

O navegador faz o **Preflight** para o endpoint da Digibee utilizando o método `OPTIONS`, que retorna os headers CORS. Como a requisição atende a política CORS configurada no trigger do pipeline, você está autorizado a seguir com a requisição `GET`.

<figure><img src="https://content.gitbook.com/content/3ANg0NQQeslB7Og5K7Ah/blobs/rzuoPJ53xXs8Apv1F4YD/image%20(55).png" alt=""><figcaption></figcaption></figure>

A requisição `GET` retornou com sucesso e agora é possível seguir com o fluxo normal do pipeline.

</details>

<details>

<summary>Exemplo 2: Requisição sem sucesso (negado pelo navegador)</summary>

A mesma requisição é realizada, porém agora adicionando o header `test`:

<figure><img src="https://content.gitbook.com/content/3ANg0NQQeslB7Og5K7Ah/blobs/uI7UQrJ2ukwzKAb4DJUX/CORS4.JPG" alt=""><figcaption></figcaption></figure>

Como o CORS header `test` não foi autorizado, a requisição foi bloqueada pela política CORS e a requisição `GET` não chegará na Digibee.

<figure><img src="https://content.gitbook.com/content/3ANg0NQQeslB7Og5K7Ah/blobs/3aEjdG0dGKhznxiIquWa/CORS5.png" alt=""><figcaption></figcaption></figure>

</details>

<details>

<summary>Exemplo 3: Requisição sem sucesso (negado pelo navegador)</summary>

Neste exemplo os headers estão de acordo com a política CORS, porém o método `POST` utilizado pela chamada no navegador não está configurado no trigger. Isso vai gerar um erro **404 Not found**.

<figure><img src="https://content.gitbook.com/content/3ANg0NQQeslB7Og5K7Ah/blobs/nR6WFLfMiaWCjXqaYfYa/CORS6.JPG" alt=""><figcaption></figcaption></figure>

<figure><img src="https://content.gitbook.com/content/3ANg0NQQeslB7Og5K7Ah/blobs/XIHCnh8FW1xwTk6ttc9w/cors7.png" alt=""><figcaption></figcaption></figure>

</details>
