ThingWorx Modelldefinition in Composer > Sicherheit > Cross-Origin Resource Sharing (CORS)
Cross-Origin Resource Sharing (CORS)
Die Aktivierung von Cross-Origin Resource Sharing (CORS) ist entscheidend für Anforderungen von einer Domäne oder Website an eine ThingWorx Anwendung, die auf einem anderen Server bereitgestellt wird.
* 
CORS steht in direkter Beziehung zu HTTP, da es HTTP-Header verwendet, um zu bestimmen, ob eine Cross-Origin-Anforderung sicher und zulässig ist. Weitere Informationen finden Sie im HTTP Developer Guide (HTTP-Entwicklerhandbuch).
1. Aktualisieren Sie die Datei web.xml unter <Apache Tomcat Install>\webapps\Thingworx\WEB-INF\, indem Sie die folgenden CorsFilter und CorsFilter Mapping als ersten Parameter direkt nach der Zeile </session-config> platzieren:
<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>
* 
Beachten Sie Folgendes:
Aktualisieren Sie den Parameter cors.allowed.origins mit der/den gewünschten Web-Adresse(n).
Mehrere zulässige Ursprünge können mit einem Komma als Trennzeichen angegeben werden. Beispiel: https://origin1.com, https://origin2.com.
* kann ausschließlich verwendet werden, um Anforderungen von allen Ursprüngen zuzulassen. * kann nur allein verwendet werden, um alle Ursprünge zuzulassen. * kann nicht als Teil eines URI verwendet werden.
Stellen Sie für Umgebungen, die Single Sign-On (SSO) mit PingFederate verwenden, sicher, dass der PingFederate Runtime Server-FQDN als zulässiger Ursprung hinzugefügt wird.
http://<Ping Federate FQDN>:9301 http://<Ping Federate FQDN>:9031
Fügen Sie dem Parameter cors.allowed.headers bei Bedarf benutzerdefinierte Kopfzeilen hinzu, oder entfernen Sie sie.
Legen Sie cors.support.credentials auf "true" fest, um die Standardauthentifizierung zu ermöglichen.
2. Kommentieren Sie den Block unten aus, der sich auf OPTIONS in der web.xml Datei bezieht.
<!--   <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. Speichern Sie die Datei web.xml.
4. Starten Sie Apache Tomcat neu.
Weitere Details
CORS muss nach allen ThingWorx Upgrades erneut aktiviert werden, da der Ordner <Tomcat Home>\webapps\Thingworx während dieses Prozesses entfernt wird. Weitere Informationen finden Sie in der offiziellen Apache Tomcat Configuration Reference für Ihre Tomcat-Version.
CORS kann mit einem Online-JavaScript-Editor getestet werden, und eines der Skripts unten ausführen.
Authentifizierung mit Anwendungsschlüssel
<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>
* 
<APPLCATION_KEY> muss durch einen aktiven, nicht abgelaufenen Anwendungsschlüssel von ThingWorx Platform ersetzt werden.
Benutzernamen- und Passwortauthentifizierung
<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> muss in Base64 kodiert sein und einen Doppelpunkt als Trennzeichen zwischen Benutzername und Passwort aufweisen. Beispielsweise wird der Benutzername Administrator mit dem Passwort ptc123 in einen Base64-Encoder als Administrator:ptc123 eingegeben, was zu einem Wert von QWRtaW5pc3RyYXRvcjpwdGMxMjM= führt. Diese Methode wird nur zu Testzwecken verwendet, da Base64 dekodiert werden kann, um den Benutzernamen und den Passwortwert als einfachen Text zu erhalten.
Es wird empfohlen, die gemeinsame Nutzung von Ressourcen zwischen zwei sicheren Servern vorzunehmen. Für beide ist z.B. HTTPS aktiviert. Die Aktivierung von HTTPS nur an einem Ende der Verbindung kann zu einem gemischten Inhaltsfehler führen.
War dies hilfreich?