Définition du modèle ThingWorx dans Composer > Sécurité > Partage des ressources entre origines multiples (CORS)
Partage des ressources entre origines multiples (CORS)
L'activation du partage des ressources entre origines multiples (CORS) est cruciale pour effectuer des requêtes depuis un domaine ou un site Web vers une application ThingWorx déployée sur un serveur différent.
* 
Le service CORS est directement lié au protocole HTTP, car il utilise des en-têtes HTTP pour déterminer si une requête partagée entre origines multiples est sûre et autorisée. Pour plus d'informations, consultez le manuel anglais HTTP Developer Guide (Guide du développeur HTTP).
1. Mettez à jour le fichier web.xml situé dans <Installation Apache Tomcat>\webapps\Thingworx\WEB-INF\ en plaçant les CorsFilter et CorsFilter Mapping suivants comme premier paramètre juste après la ligne </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>
* 
Prenez en considération les points suivants :
Mettez à jour le paramètre cors.allowed.origins avec la ou les adresses Web souhaitées.
Plusieurs origines autorisées peuvent être spécifiées en les séparant par une virgule. Par exemple, https://origin1.com, https://origin2.com.
* peut exclusivement être utilisé pour autoriser les requêtes provenant de toutes les origines. * ne peut être utilisé seul que pour autoriser toutes les origines. * ne peut pas être utilisé comme partie d'un URI.
Pour les environnements qui utilisent l'authentification unique (SSO) avec PingFederate, assurez-vous que le nom de domaine complet (FQDN) du serveur d'exécution PingFederate est ajouté en tant qu'origine autorisée.
http://<FQDN Ping Federate> :9301 http://<Ping Federate FQDN>:9031
Pour le paramètre cors.allowed.headers, ajoutez ou supprimez tout en-tête personnalisé, comme il convient.
Définissez cors.support.credentials sur "vrai" pour autoriser l'authentification de base.
2. Mettez en commentaire le bloc ci-dessous associé à OPTIONS dans le fichier 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. Enregistrez le fichier web.xml.
4. Redémarrez Apache Tomcat.
Détails supplémentaires
Vous devrez réactiver CORS après toute mise à niveau ThingWorx, car le dossier <Accueil Tomcat>\webapps\Thingworx est supprimé au cours de ce processus. Pour plus d'informations, consultez le manuel officiel de configuration d'Apache Tomcat correspondant à votre version de Tomcat.
Le service CORS peut être testé à l'aide d'un éditeur Javascript en ligne et en exécutant l'un des scripts ci-dessous.
Authentification par clé d'application
<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> doit être remplacée par une clé d'application active non expirée de ThingWorx Platform.
Authentification par nom d'utilisateur et mot de passe
<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> doit être codé en Base64 avec un signe deux-points séparant le nom d'utilisateur et le mot de passe. Par exemple, le nom d'utilisateur Administrateur avec le mot de passe ptc123 serait entré dans un encodeur Base64 sous la forme Administrator :ptc123, ce qui donnerait une valeur de QWRtaW5pc3RyYXRvcjpwdGMxMjM=. Cette méthode est utilisée à des fins de test uniquement, car Base64 peut être décodé pour obtenir la valeur du nom d'utilisateur et du mot de passe en texte brut.
Il est recommandé que le partage des ressources s'effectue entre deux serveurs sécurisés ; par exemple, avec le protocole HTTPS activé dans les deux cas. L'activation du protocole HTTPS à une seule extrémité de la connexion peut entraîner une erreur de contenu mixte.
Est-ce que cela a été utile ?