Composer 中的 ThingWorx 模型定義 > 安全性 > 跨原始來源資源共用 (CORS)
跨原始來源資源共用 (CORS)
啟用「跨原始來源資源共用」(CORS) 對於從一個網域或網站向部署在不同伺服器上的 ThingWorx 應用程式發出請求至關重要。
* 
CORS 與 HTTP 直接相關,因為它使用 HTTP 標題來確定跨原始請求是否安全且得到允許。如需詳細資訊,請參閱 HTTP 開發人員指南
1. 更新位於 <Apache Tomcat Install>\webapps\Thingworx\WEB-INF\ 中的 web.xml 檔案,方法是將下列 CorsFilterCorsFilter Mapping 作為第一個參數放置於緊跟在 </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>
* 
請注意下列事項:
cors.allowed.origins 參數更新為所需的網址。
可使用逗號分隔符號指定多個允許的來源。例如,https://origin1.com, https://origin2.com
* 可專門用於允許來自所有來源的請求。* 只能單獨使用,以允許所有來源。* 不能作為 URI 的一部份使用。
對於使用 PingFederate 進行單一登入 (SSO) 的環境,請確保將 PingFederate Runtime Server FQDN 新增為允許的來源。
http://<Ping Federate FQDN>:9301 http://<Ping Federate FQDN>:9031
視需要為 cors.allowed.headers 參數新增或移除任何自訂標題。
cors.support.credentials 設為 true 可允許進行基本驗證。
2. web.xml 檔案中與 OPTIONS 相關的以下區塊加上註解。
<!-- <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. 儲存 web.xml 檔案。
4. 重新啟動 Apache Tomcat。
其他詳細資訊
進行任何 ThingWorx 升級之後,都需要重新啟用 CORS,因為在此程序中會移除 <Tomcat Home>\webapps\Thingworx 資料夾。如需詳細資訊,請參閱您的 Tomcat 版本的官方 Apache Tomcat 組態參考
您可以使用線上 Javascript 編輯器並執行以下其中一個指令集來測試 CORS。
應用程式金鑰驗證
<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> 必須以 ThingWorx Platform 中的使用中未到期應用程式金鑰取代 。
使用者名稱與密碼驗證
<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> 必須是以冒號分隔使用者名稱與密碼的 Base64 編碼。例如,密碼為 ptc123 的使用者名稱 Administrator 會以 Administrator:ptc123 輸入到 Base64 編碼器中,產生的值為 QWRtaW5pc3RyYXRvcjpwdGMxMjM=。此方法僅用於測試的目的,因為可以解碼 Base64 來以純文字格式取得使用者名稱和密碼值。
建議在兩部安全伺服器之間進行資源共用。例如,兩者都啟用了 HTTPS。僅在連線的一端啟用 HTTPS 可能會導致「混合內容錯誤」。
這是否有幫助?