Histórico da Página
...
- Edite o arquivo domain.xml ([diretório_instalação]/appserver/domain/configuration/domain.xml)
- Procure pela seguinte linha:
...
language | xml |
---|
- <response-
...
- header header-name="Access-Control-Allow-Origin" header-value="*" name="Access-Control-Allow-Origin"/>
Bloco de código | ||
---|---|---|
| ||
<response-header header-name="Access-Control-Allow-Origin" header-value="*" name="Access-Control-Allow-Origin"/> |
- Substitua o "*" pela URL de acesso ao TOTVS Fluig Plataforma. Por exemplo, se a URL de acesso ao fluig for "https://www.minhaempresa.com.br", ficaria assim:
Bloco de código | ||
---|---|---|
| ||
<response-header header-name="Access-Control-Allow-Origin" name="Access-Control-Allow-Origin" header-value="httpsheader-value="https://www.minhaempresa.com.br" name="Access-Control-Allow-Origin"/> |
- Reinicie os serviços da plataforma
Permitindo a conexão de uma única origem
...
Bloco de código | ||
---|---|---|
| ||
<response-header header-name="Access-Control-Allow-Origin" header-value="*" name="Access-Control-Allow-Origin" header-value="*" /> |
- Substitua o "*" pela URL origem que terá permissão de acessar o TOTVS Fluig Plataforma. Por exemplo, se a URL de acesso ao fluig for "https://www.minhaempresa.com.br" e deseja-se liberar acesso a um site cuja URL de acesso seja "https://www.outrosite.com.br", ficaria assim:
Bloco de código | ||
---|---|---|
| ||
<response-header header-name="Access-Control-Allow-Origin" name="Access-Control-Allow-Origin" header-value="https:header-value="https://www.outrosite.com.br" name="Access-Control-Allow-Origin"/> |
- Reinicie os serviços da plataforma
Permitindo a conexão de múltiplas origens
...
Mas há uma solução: usar ferramentas de terceiros (como NGINX ou Apache), construindo uma de rede DMZ. Inclusive a maneira mais segura de utilizar o TOTVS Fluig Plataforma é não expô-lo diretamente na internet, mas sim através de uma DMZ (Veja mais informações aqui).
...
Bloco de código | ||||
---|---|---|---|---|
| ||||
upstream fluig-http { server 192.168.2.100:8080; } server { listen 443 ssl; server_name *.minhaempresa.com; server_tokens off; ssl_certificate fullchain.pem; ssl_certificate_key privkey.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; location / { :!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK; # Se necessário complemente com outras chaves Ciphers suportadas; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; location / { set $CORS ""; # Lista de origens permitidas if ($http_origin ~* "^https://(www.minhaempresa.com|empresa1.com|api.empresa2.com)$") { set $CORS "O"; } if ($request_method = 'OPTIONS') { set $CORS "${CORS}O"; # Lista de origens permitidas} if ($http_origin ~* "^https://(www.minhaempresa.com|empresa1.com|api.empresa2.com)$$CORS = "OO") { set $CORS "O"add_header Access-Control-Allow-Origin $http_origin; } add_header if ($request_method = 'OPTIONS') { set $CORS "${CORS}O"Access-Control-Allow-Methods 'GET, POST, OPTIONS, PUT'; } add_header if ($CORS = "OO") {Access-Control-Allow-Headers 'Accept,Authorization,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type'; add_header Access-Control-Allow-Origin $http_originCredentials 'true'; add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS, PUTMax-Age 3600; add_header Content-Type 'text/plain charset=UTF-8'; add_header Access-Control-Allow-Headers 'Accept,Authorization,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type'; Content-Length 0; add_header Access-Control-Allow-Credentials 'true';return 204; } if ($CORS = "O") { add_header Access-Control-MaxAllow-AgeOrigin 3600$http_origin; add_header Content-Type 'text/plain charset=UTF-8Access-Control-Allow-Methods 'GET, POST, OPTIONS, PUT'; add_header Access-Control-Allow-Headers 'Accept,Authorization,Content-Length 0; -Type,X-Requested-With,User-Agent,If-Modified-Since,Cache-Control'; return 204; add_header Access-Control-Allow-Credentials 'true'; } add_header Access-Control-Max-Age 3600; if ($CORS = "O") { } proxy_pass http://fluig-http; add_header Access-Control-Allow-Origin $http_origin; proxy_ssl_verify off; addproxy_ssl_header Access-Control-Allow-Methods 'GET, POST, OPTIONS, PUT'; ciphers HIGH:!aNULL:!MD5; addproxy_set_header AccessX-ControlForwarded-Allow-Headers 'Accept,Authorization,Content-Type,X-Requested-With,User-Agent,If-Modified-Since,Cache-Control'Host $host:443; addproxy_set_header AccessX-ControlForwarded-Allow-Credentials 'true'Server $host; addproxy_set_header AccessX-ControlForwarded-Max-Age 3600; For $proxy_add_x_forwarded_for; proxy_set_header } X-Forwarded-Proto https; proxy_pass http://fluig-http;set_header X-Real-IP $remote_addr; proxyclient_max_ssl_verifybody_size off880m; proxyclient_body_sslbuffer_cipherssize HIGH:!aNULL:!MD5256k; proxy_setconnect_headertimeout X-Forwarded-Host $host:443 800; proxy_set_header X-Forwarded-Server $host; send_timeout proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for 800; proxy_setread_headertimeout X-Forwarded-Proto https; proxy_set_header X-Real-IP $remote_addr800; clientproxy_max_bodybuffer_size 880m 8k; client_body_buffer_size 256k; proxy_buffers proxy_connect_timeout 8 80032k; proxy_sendbusy_timeoutbuffers_size 80064k; proxy_read_timeout 800; proxy_buffer_size 8k; proxy_buffers 8 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; } }temp_file_write_size 64k; } } |
Nota |
---|
Recomendamos o uso de chaves mais modernas e seguras como os indicados no exemplo. Porém, outras chaves também são suportadas: DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA Preencha a diretiva ssl_ciphers do fluig.conf substituindo pelos valores suportados acima que estejam de acordo com sua política de segurança. As chaves podem ser validadas em https://ciphersuite.info/. |
Utilizando Apache para configurar CORS
A seguir um exemplo de configuração para o Apache que pode ser usado como base para configurá-lo para fazer a validação de CORS. Essa configuração é úm um aprimoramento da configuração descrita em Configuração de Proxy Reverso - Configuração do Apache (SSL) + Fluig (HTTP)
...