{"id":6303,"date":"2023-08-12T16:02:44","date_gmt":"2023-08-12T19:02:44","guid":{"rendered":"https:\/\/blog.lucianoreis.com\/?p=6303"},"modified":"2023-12-17T13:41:37","modified_gmt":"2023-12-17T16:41:37","slug":"habilitando-cors-no-iis-10-rapido-e-facil","status":"publish","type":"post","link":"https:\/\/blog.lucianoreis.com\/2023\/08\/12\/habilitando-cors-no-iis-10-rapido-e-facil\/","title":{"rendered":"Habilitando CORS no IIS 10 – R\u00e1pido e F\u00e1cil"},"content":{"rendered":"\n

O cen\u00e1rio \u00e9 esse: seu programa client-side est\u00e1 rodando no browser e, faz uma requisi\u00e7\u00e3o a uma API que est\u00e1 em outro servidor e o programa tem sua execu\u00e7\u00e3o interrompida com a mensagem:<\/p>\n\n\n\n

Access to fetch at ‘(URI do endpoint)’ from origin ‘(URL da origem)’ has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource. If an opaque response serves your needs, set the request’s mode to ‘no-cors’ to fetch the resource with CORS disabled.<\/p>\n\n\n\n

Access to fetch at ‘(URI do endpoint)’ from origin ‘(URL da Origem)’ has been blocked by CORS policy: The ‘Access-Control-Allow-Origin’ header contains the invalid value ‘(algum valor)’. Have the server send the header with a valid value, or, if an opaque response serves your needs, set the request’s mode to ‘no-cors’ to fetch the resource with CORS disabled.<\/p>\n\n\n\n

GET (URI do endpoint) net::ERR_FAILED 200<\/p>\n\n\n\n

Isso acontece porque a pol\u00edtica de CORS – Cross Origin Resource Sharing<\/em> – n\u00e3o permite requisi\u00e7\u00f5es vindas de outros endere\u00e7os que n\u00e3o seja o seu pr\u00f3prio.<\/p>\n\n\n\n

A forma mais f\u00e1cil e r\u00e1pida de resolver este problema, \u00e9 liberar todas as requisi\u00e7\u00f5es ao seu servidor, n\u00e3o importando qual seja a origem. Isso pode representar um problema de seguran\u00e7a mas, caso seja suficiente para o seu caso, vou mostrar como configurar o IIS para se comportar dessa forma sem a necessidade de instala\u00e7\u00e3o de qualquer componente.<\/p>\n\n\n\n

Caso voc\u00ea precise de mais seguran\u00e7a e realmente seja necess\u00e1rio fazer um controle granular de quem pode acessar sua API vou passar a explica\u00e7\u00e3o logo abaixo.<\/p>\n\n\n\n

Liberando Tudo<\/h2>\n\n\n\n
\"\"<\/figure>\n\n\n\n

1. No gerenciador do IIS selecione um site e ent\u00e3o abra o item “HTTP Response Headers”.<\/p>\n\n\n\n

\"\"<\/figure>\n\n\n\n

2. Clique em “Add”<\/p>\n\n\n\n

\"\"<\/figure>\n\n\n\n

3. Preencha com os seguintes valores:
Name: Access-Control-Allow-Origin
Value: *
Atualizado:<\/strong>
Volte ao passo 2, “Add” e adicione outro registro com os seguintes valores:
Name: Access-Control-Allow-Headers
Value: *<\/p>\n\n\n\n

\"\"<\/figure>\n\n\n\n

4. Pronto. Agora seu servidor ir\u00e1 liberar todas as requisi\u00e7\u00f5es. As aplica\u00e7\u00f5es que consomem seus servi\u00e7os n\u00e3o mas receber\u00e3o erro de bloqueio pela pol\u00edtica de CORS.<\/p>\n\n\n\n

5. V\u00e1 at\u00e9 o final deste artigo e poste um coment\u00e1rio me deixando saber que esta dica salvou o seu dia! \ud83d\ude09
<\/p>\n\n\n\n

Colocando o CORS Para Funcionar<\/h2>\n\n\n\n

Mas o CORS existe por um motivo e, certamente, em um ambiente de produ\u00e7\u00e3o voc\u00ea ir\u00e1 querer tirar proveito deste recurso. O CORS habilitado impede que origens n\u00e3o reconhecidas fa\u00e7am uso da sua API. Caso a sua API seja de acesso p\u00fablico, ent\u00e3o a dica dada anteriormente, para liberar todos os acessos j\u00e1 atende \u00e0 sua necessidade, mas caso voc\u00ea queria controlar quem pode consumir sua API, segue os passos.<\/p>\n\n\n\n

1. Por incr\u00edvel que pare\u00e7a, o m\u00f3dulo de CORS n\u00e3o faz parte do IIS por padr\u00e3o e nem est\u00e1 nas op\u00e7\u00f5es de instala\u00e7\u00e3o deste recurso. Ent\u00e3o, em primeiro lugar, no seu servidor que est\u00e1 rodando o IIS fa\u00e7a a download deste componente. Para isso, v\u00e1 direto ao site oficial da Microsoft:
https:\/\/www.iis.net\/downloads\/microsoft\/iis-cors-module<\/a><\/p>\n\n\n\n

2. Uma vez instalado o m\u00f3dulo CORS no servidor, as defini\u00e7\u00f5es devem ser passadas atrav\u00e9s do conte\u00fado do arquivo “web.config”. No exemplo abaixo eu mostro como liberar todas as requisi\u00e7\u00f5es originadas pelos dom\u00ednios “larsoft.com.br” e “lucianoreis.com”:<\/p>\n\n\n\n

\t<!-- CORS -->\n\t<system.webServer>\n\t\t<cors enabled="true">\n\t\t\t<add origin="https:\/\/*.larsoft.com.br">\n\t\t\t\t<allowHeaders allowAllRequestedHeaders="true" \/>\n\t\t\t\t<allowMethods>\n\t\t\t\t\t<add method="GET" \/>\n\t\t\t\t\t<add method="HEAD" \/>\n\t\t\t\t\t<add method="POST" \/>\n\t\t\t\t\t<add method="PUT" \/>\n\t\t\t\t\t<add method="DELETE" \/>\n\t\t\t\t\t<add method="CONNECT" \/>\n\t\t\t\t\t<add method="OPTIONS" \/>\n\t\t\t\t\t<add method="TRACE" \/>\n\t\t\t\t\t<add method="PATCH" \/>\n\t\t\t\t<\/allowMethods>\n\t\t\t<\/add>\n\t\t\t<add origin="https:\/\/*.lucianoreis.com">\n\t\t\t\t<allowHeaders allowAllRequestedHeaders="true" \/>\n\t\t\t\t<allowMethods>\n\t\t\t\t\t<add method="GET" \/>\n\t\t\t\t\t<add method="HEAD" \/>\n\t\t\t\t\t<add method="POST" \/>\n\t\t\t\t\t<add method="PUT" \/>\n\t\t\t\t\t<add method="DELETE" \/>\n\t\t\t\t\t<add method="CONNECT" \/>\n\t\t\t\t\t<add method="OPTIONS" \/>\n\t\t\t\t\t<add method="TRACE" \/>\n\t\t\t\t\t<add method="PATCH" \/>\n\t\t\t\t<\/allowMethods>\n\t\t\t<\/add>\n\t\t<\/cors>\n\t<\/system.webServer>\n  <!-- Fim do CORS -->\n<\/pre><\/div>\n\n\n\n

Obviamente n\u00e3o \u00e9 necess\u00e1rio adicionar tantos m\u00e9todos para cada origem, eu o fiz apenas por fins did\u00e1ticos. Normalmente s\u00e3o habilitados apenas GET, HEAD, POST, PUT e DELETE.<\/p>\n\n\n\n

3. Pronto, com isso seu site vai liberar acesso exclusivamente para as origens determinadas. Me dica ali nos coment\u00e1rios se essa dica foi \u00fatil para voc\u00ea.<\/p>\n\n\n\n

Para mais informa\u00e7\u00f5es sobre CORS no IIS, acesse diretamente o site da Microsoft em:<\/p>\n\n\n