Composer での ThingWorx モデルの定義 > セキュリティ > CORS (Cross-Origin Resource Sharing)
CORS (Cross-Origin Resource Sharing)
別のサーバーにデプロイされている ThingWorx アプリケーションに対し、あるドメインまたは Web サイトからリクエストを行うには、CORS (Cross-Origin Resource Sharing) を有効にすることが不可欠です。
* 
CORS は、HTTP ヘッダーを使用してクロスオリジンリクエストが安全で許可されているかどうかを判断するため、HTTP に直接関連しています。詳細については、HTTP 開発者向けガイドを参照してください。
1. <Apache Tomcat インストール>\webapps\Thingworx\WEB-INF\ にある web.xml ファイルを更新します。具体的には、</session-config> 行の直後に、最初のパラメータとして次の CorsFilter および CorsFilter Mapping を配置します。
<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 パラメータを目的の Web アドレスに更新します。
複数の許可されるオリジンを指定するには、コンマ区切り記号を使用します。例: https://origin1.com, https://origin2.com
* は、すべてのオリジンからのリクエストを許可するために排他的に使用できます。* は、すべてのオリジンを許可するために単独でのみ使用できます。* を URI の一部として使用することはできません。
PingFederate によるシングルサインオン (SSO) を使用する環境では、PingFederate ランタイムサーバーの FQDN が、許可されたオリジンとして追加されている必要があります。
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 を再起動します。
その他の詳細
このプロセス中に <Tomcat ホーム>\webapps\Thingworx フォルダが除去されるため、ThingWorx のアップグレード後には CORS を再度有効にする必要があります。詳細については、ご使用の Tomcat バージョンの公式 Apache Tomcat Configuration Reference を参照してください。
CORS は、オンライン Javascript エディタを使用し、以下のいずれかのスクリプトを実行することでテストできます。
アプリケーションキー認証
<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 でエンコードする必要があります。たとえば、ユーザー名が Administrator、パスワードが ptc123 の場合、Base64 エンコーダに Administrator:ptc123 と入力し、結果として QWRtaW5pc3RyYXRvcjpwdGMxMjM= という値が得られます。Base64 をデコードすることでユーザー名とパスワードの値をプレーンテキストで取得できるため、この方法はテスト目的でのみ使用されます。
リソース共有は、セキュリティで保護された 2 つのサーバー間で行うことをお勧めします。たとえば、両方のサーバーで HTTPS が有効になっている場合などです。接続の一端でのみ HTTPS を有効にすると、混合コンテンツエラーが発生する可能性があります。
これは役に立ちましたか?