Definizione del modello ThingWorx in Composer > Protezione > CORS (Cross-Origin Resource Sharing)
CORS (Cross-Origin Resource Sharing)
L'attivazione di CORS (Cross-Origin Resource Sharing) è fondamentale per effettuare richieste da un dominio o un sito Web a un'applicazione ThingWorx distribuita su un altro server.
* 
CORS è direttamente correlato a HTTP, perché utilizza le intestazioni HTTP per determinare se una richiesta di origine incrociata è sicura e consentita. Per ulteriori informazioni, vedere la HTTP Developer Guide.
1. Aggiornare il file web.xml situato in <directory di installazione di Apache Tomcat>\webapps\Thingworx\WEB-INF\ inserendo i seguenti elementi CorsFilter e CorsFilter Mapping come primo parametro subito dopo la riga </session-config>:
<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
<init-param>
<param-name>cors.allowed.origins</param-name>
<param-value>[ALLOWED_ORIGINS]</param-value>
</init-param>
<init-param>
<param-name>cors.allowed.methods</param-name>
<param-value>OPTIONS,GET,POST,HEAD,PUT,DELETE</param-value>
</init-param>
<init-param>
<param-name>cors.allowed.headers</param-name>
<param-value>Authorization,appKey,x-thingworx-session,Content-Type,X-Requested-With,Origin,Access-Control-Request-Method,Access-Control-Request-Headers,Accept</param-value>
</init-param>
<init-param>
<param-name>cors.exposed.headers</param-name>
<param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value>
</init-param>
<init-param>
<param-name>cors.support.credentials</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>cors.preflight.maxage</param-name>
<param-value>10</param-value>
</init-param>
<init-param>
<param-name>cors.request.decorate</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
* 
Tenere presente quanto riportato di seguito.
Aggiornare il parametro cors.allowed.origins con gli indirizzi Web desiderati.
È possibile specificare più origini consentite utilizzando una virgola come delimitatore. Ad esempio, https://origin1.com, https://origin2.com.
* può essere utilizzato esclusivamente per consentire richieste da tutte le origini. * può essere utilizzato da solo per consentire tutte le origini. * non può essere utilizzato come parte di un URI.
Per gli ambienti che utilizzano Single Sign-On (SSO) con PingFederate, assicurarsi che l'FQDN del server di runtime PingFederate sia aggiunto come origine consentita.
http://<FQDN PingFederate>:9301 http://<Ping Federate FQDN>:9031
Aggiungere o rimuovere eventuali intestazioni personalizzate dal parametro cors.allowed.headers in base alle esigenze.
Impostare cors.support.credentials su true per consentire l'autenticazione di base.
2. Commentare il blocco sottostante relativo a OPTIONS nel file web.xml.
<!--   <security-constraint>
<web-resource-collection>
<web-resource-name>Forbidden</web-resource-name>
<url-pattern>/*</url-pattern>
<http-method>OPTIONS</http-method>
</web-resource-collection>
<auth-constraint/>
</security-constraint> -->
3. Salvare il file web.xml.
4. Riavviare Apache Tomcat.
Dettagli aggiuntivi
È necessario riattivare CORS in seguito a qualsiasi aggiornamento di ThingWorx, poiché la cartella <Tomcat_Home>\webapps\Thingworx viene rimossa durante questo processo. Per ulteriori informazioni, vedere il documento ufficiale Apache Tomcat Configuration Reference per la versione di Tomcat in uso.
È possibile testare CORS utilizzando un editor JavaScript online ed eseguendo uno degli script riportati di seguito.
Autenticazione tramite chiave di accesso
<script>
var xhr = new XMLHttpRequest();
xhr.open("GET", "https://[THINGWORX_HOST]:[PORT]/Thingworx/Things", true);
xhr.setRequestHeader("appKey", "<APPLICATION_KEY>");
xhr.setRequestHeader("accept", "application/json");
xhr.send();
</script>
* 
È necessario sostituire <APPLCATION_KEY> con una chiave di accesso attiva non scaduta di ThingWorx Platform.
Autenticazione tramite nome utente e password
<script>
var xhr = new XMLHttpRequest();
xhr.open("GET", "https://[THINGWORX_HOST]:[PORT]/Thingworx/Things", true);
xhr.setRequestHeader("Authorization", "Basic <USER_PASSWORD>");
xhr.setRequestHeader("accept", "application/json");
xhr.send();
</script>
* 
<USER_PASSWORD> deve essere codificato in base64 con i due punti che separano nome utente e password. Ad esempio, il nome utente Administrator con la password ptc123 viene immesso in un codificatore Base64 come Administrator:ptc123, generando il valore QWRtaW5pc3RyYXRvcjpwdGMxMjM=. Questo metodo viene utilizzato solo a scopo di test, poiché è possibile decodificare Base64 per ottenere i valori di nome utente e password in testo normale.
È consigliabile che la condivisione delle risorse venga eseguita tra due server protetti. Ad esempio, in entrambi i server il protocollo HTTPS deve essere attivato. L'attivazione di HTTPS su una sola estremità della connessione può causare un errore di contenuto misto.
È stato utile?