Composer의 ThingWorx 모델 정의 > 보안 > CORS(Cross-Origin Resource Sharing)
CORS(Cross-Origin Resource Sharing)
CORS(Cross-Origin Resource Sharing) 활성화는 한 도메인 또는 웹 사이트에서 다른 서버에 배포된 ThingWorx 응용 프로그램으로 요청하는 데 매우 중요합니다.
* 
CORS는 HTTP 헤더를 사용하여 원본 간 요청이 안전하고 허용되는지 여부를 결정하기 때문에 HTTP와 직접 관련이 있습니다. 자세한 내용은 HTTP 개발자 안내서를 참조하십시오.
1. <Apache Tomcat 설치>\webapps\Thingworx\WEB-INF\ 에 있는 web.xml 파일을 업데이트하려면 </session-config> 줄 바로 뒤에 첫 번째 매개 변수로 다음 CorsFilterCorsFilter 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 매개 변수를 업데이트합니다.
쉼표 구분 기호를 사용하여 허용된 여러 원점을 지정할 수 있습니다. 예를 들면 https://origin1.com, https://origin2.com입니다.
*는 모든 원본의 요청을 허용하는 데에만 사용할 수 있습니다. *는 모든 원본을 허용하기 위해 단독으로만 사용할 수 있습니다. *는 URI의 일부로 사용할 수 없습니다.
PingFederate와 함께 SSO(Single Sign-On)를 활용하는 환경에서는 PingFederate 런타임 서버 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을 다시 시작합니다.
추가 세부 정보
이 프로세스 중에 <Tomcat 홈>\webapps\Thingworx 폴더가 제거되므로 ThingWorx 업그레이드 후에 CORS를 다시 활성화해야 합니다. 자세한 내용은 Tomcat 버전에 대한 공식 Apache Tomcat 구성 참조를 참조하십시오.
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를 디코딩하여 일반 텍스트로 된 사용자 이름과 암호 값을 얻을 수 있으므로 테스트 목적으로만 사용됩니다.
리소스 공유는 두 보안 서버 간에 수행하는 것이 좋습니다. 예를 들어, HTTPS가 둘 다 활성화되어 있습니다. 연결의 한 쪽 끝에서만 HTTPS를 활성화하면 혼합 콘텐츠 오류가 발생할 수 있습니다.
도움이 되셨나요?