Definición del modelo de ThingWorx en Composer > Seguridad > Uso compartido de recursos de origen cruzado (CORS)
Uso compartido de recursos de origen cruzado (CORS)
La activación del uso compartido de recursos de origen cruzado (CORS) es crucial para realizar solicitudes de un dominio o sitio web a una aplicación de ThingWorx implementada en un servidor diferente.
* 
CORS está directamente relacionado con HTTP porque utiliza cabeceras HTTP para determinar si una solicitud de origen cruzado es segura y está permitida. Para obtener más información, consulte el manual para desarrolladores HTTP.
1. Actualice el fichero web.xml que se encuentra en <Directorio de instalación de Apache Tomcat>\webapps\Thingworx\WEB-INF\ colocando CorsFilter y CorsFilter Mapping como primer parámetro justo después de la línea </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>
* 
Se debe tener en cuenta lo siguiente:
Actualice el parámetro cors.allowed.origins con las direcciones web deseadas.
Se pueden especificar múltiples orígenes permitidos mediante un delimitador de comas. Por ejemplo, https://origin1.com, https://origin2.com.
* se puede utilizar exclusivamente para permitir solicitudes de todos los orígenes. * solo se puede usar por sí solo para permitir todos los orígenes. * no se puede utilizar como parte de un URI.
Para los entornos que utilizan el inicio de sesión único (SSO) con PingFederate, asegúrese de que el FQDN del servidor en tiempo de ejecución de PingFederate se añada como origen permitido.
http://<FQDN de Ping Federate>:9301 http://<Ping Federate FQDN>:9031
Añada o quite las cabeceras personalizadas del parámetro cors.allowed.headers según sea necesario.
Defina cors.support.credentials en verdadero para permitir la autenticación básica.
2. Comente el siguiente bloque relacionado con OPTIONS en el fichero 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. Guarde el fichero web.xml.
4. Reinicie Apache Tomcat.
Detalles adicionales
CORS deberá volver a activarse después de cualquier actualización de ThingWorx, ya que la carpeta <Directorio Principal de Tomcat>\webapps\Thingworx se quita durante este proceso. Para obtener más información, consulte la referencia de configuración oficial de Apache Tomcat para la versión de Tomcat.
CORS se puede probar utilizando un editor de Javascript en línea y ejecutando uno de los siguientes scripts.
Autenticación de la clave de aplicación
<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> se debe reemplazar por una clave de aplicación activa no vencida de ThingWorx Platform.
Autenticación del nombre de usuario y contraseña
<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> debe estar codificado en Base64 con dos puntos que separen el nombre de usuario y la contraseña. Por ejemplo, el nombre de usuario Administrator con la contraseña ptc123 se introduciría en un codificador Base64 como Administrator:ptc123, lo que daría como resultado un valor de QWRtaW5pc3RyYXRvcjpwdGMxMjM=. Este método se utiliza solo con fines de prueba, ya que Base64 se puede decodificar para obtener el valor de nombre de usuario y contraseña en texto sin formato.
Se recomienda que el uso compartido de recursos se produzca entre dos servidores seguros. Por ejemplo, ambos tienen activado HTTPS. Si se activa HTTPS en un solo extremo de la conexión, se puede producir un error de contenido mixto.
¿Fue esto útil?