Composer의 ThingWorx 모델 정의 > 보안 > SSO(Single Sign-On) 인증 > ThingWorx를 리소스 공급자로 구성
ThingWorx를 리소스 공급자로 구성
ThingWorx를 리소스 공급자로 구성하여 OAuth2 프로토콜을 통해 ThingWorx URI 요청을 허용할 수 있습니다.
서비스 공급자는 리소스 공급자의 응답을 사용하여 ThingWorx에 저장된 데이터를 렌더링하고 표시할 수 있습니다.
리소스 공급자로서의 ThingWorx는 각 리소스 요청에 대한 액세스 토큰과 범위의 유효성을 검사해야 합니다.
다음 단원에서는 ThingWorx에서 ThingWorx를 리소스 공급자로 활성화하는 데 필요한 구성 단계에 대해 설명합니다. 이 용도로 구성된 다른 응용 프로그램을 구성하기 위해 조직의 다른 PTC 제품 관리자 및 ID 공급자 관리자에 문의해야 할 수도 있습니다.
프로세스 개요
ThingWorx를 리소스 공급자로 구성하려면 이 프로세스를 따르십시오.
1. Single Sign-On을 구성합니다. 이는 이 프로세스의 사전 요구 사항입니다.
* 
서비스 공급자와 리소스 공급자와의 통신 채널은 SSL이어야 합니다.
이러한 구성 단계에 사용된 일부 설정의 경우 PingFederate 설치에서 값을 가져와야 합니다.
resourceServerSettings.json 파일 구성
1. sso-settings.json과 동일한 디렉터리에서 resourceServerSettings.json 파일을 만듭니다.
다음은 resourceServerSettings.json 파일의 샘플 구조입니다.
{
"ResourceServerSettings": {
"accessTokenServicesSettings": {
"userAuthenticationConverterClassName": "com.ptc.eauth.identity.oauth2.rs.IntrospectionUserAuthenticationConverter",
"oauthTokenEndPoint": "https://<pingfed.server>:9031/as/token.oauth2",
"checkTokenEndpointUrl": "https://<pingfed.server>:9031/as/introspect.oauth2",
"clientId": "See information in the table below",
"clientSecret": "See information in the table below",
"chainedGrantType": "password"
},
"globalScopes": "THINGWORX",
"uriScopes": [
{
"uri": "See information in the table below",
"scopes": "See information in the table below",
"method": "See information in the table below"
}
]
}
2. 모든 매개 변수의 값을 사용자의 요구사항에 따라 편집해야 합니다. 구현은 조직의 보안 정책, 페더레이션에 대한 CAS 등 여러 요인에 따라 다를 수 있습니다. 다음 표의 정보를 지침으로 사용하여 서로 다른 매개 변수의 값을 설정합니다.
ResourceServerSettings.accessTokenServicesSettings 설정
매개 변수
설명
userAuthenticationConverterClassName
내부 유틸리티입니다.
com.ptc.eauth.identity.oauth2.rs.IntrospectionUserAuthenticationConverter
oauthTokenEndPoint
PingFederate의 OAuth 토큰 끝점을 지정합니다(아래 이미지 참조).
https://<pingfed.server>:<pingfed.port>/as/token.oauth2
checkTokenEndpointUrl
PingFederate의 OAuth 토큰 내부 끝점을 지정합니다(아래 이미지 참조).
https://<pingfed.server>:<pingfed.port>/as/introspect.oauth2
clientId
인증 서버에서 가져온 유효성 검사 액세스 토큰에 사용할 클라이언트 식별자를 지정합니다.
clientSecret
클라이언트 보안 값입니다.
chainedGrantType
추후 사용을 위해 예약되어 있습니다.
password
ResourceServerSettings.globalScopes 설정
매개 변수
설명
예제
globalScopes
쉼표로 구분된 글로벌 범위의 목록입니다. 리소스에 액세스하는 데 필요한 최소 범위 집합을 포함합니다. 이 매개 변수가 없거나 비어 있으면 THINGWORX가 기본 글로벌 범위로 설정됩니다. 이 매개 변수를 비워 두지 마십시오. 전용 범위가 없는 경우 THINGWORX를 값으로 설정합니다.
"globalScopes": "THINGWORX"
"globalScopes": "THINGWORX_APP1,THINGWORX_APP2"
ResourceServerSettings.uriScopes 설정
매개 변수
설명
uri
URI 패턴입니다. 글로벌 범위에 추가 범위가 필요한 리소스 또는 리소스 그룹을 정의합니다.
Thingworx/Things/** - control all Things
Thingworx/Things/Thing1 – control Thing1
scopes
추가 범위의 쉼표로 구분된 목록입니다. 나열된 모든 범위(글로벌 포함)에 대한 권한을 가진 사용자만 리소스를 볼 수 있습니다.
방법
선택 사항. 범위가 적용될 URI 메소드를 정의합니다.
* 
메소드 속성이 제공되지 않으면 지정된 URI가 모든 HTTP 메소드에 대해 지정된 범위로 보호된다고 가정합니다.
가능한 값은 REST 프로토콜에서 사용할 수 있는 메소드(예: GET 또는 POST)입니다.
URI에 대해 정의된 범위가 있는 경우 글로벌 범위와 정의된 URI 범위를 부여해야 해당 리소스에 액세스할 수 있습니다. 요청된 리소스에 적용할 수 있는 URI 규칙이 두 개 이상일 경우 해당 리소스에 액세스하려면 모든 관련 범위를 부여해야 합니다. 제한된 리소스에 액세스하지 않으려면 승인 서버(예: PingFed)에 없는 범위를 사용하여 이러한 REST 끝점에 URIscope를 추가합니다. 범위 보호 외에 ThingWorx에는 범위 위에도 적용될 고유한 사용자 기반 권한도 있습니다. 예를 들어, 사용자 A가 올바른 범위로 리소스를 요청하지만 권한이 없는 경우 403 오류와 함께 요청이 실패합니다.
아래 예는 resourceServerSettings.json 구성의 관련 패턴입니다.

"globalScopes": "THINGWORX",
"uriScopes": [
{
"uri": "/Thingworx/Things/**",
"scopes": "THINGWORX_THING_READ"
},
{
"uri": "/Thingworx/Things/WriteThing",
"scopes": "THINGWORX_THING_WRITE"
"method": "POST"
}
]
* 
아래 표의 각 사용 사례에서 사용자가 필요한 권한을 부여하지 않으면 ThingWorx에서 리소스를 제공하지 않습니다.
사용 사례
URI 요청
필수 권한
메모
GET /Thingworx/Mashups/Mashup1
THINGWORX
URI 요청이 어떤 uriScopes 규칙과도 일치하지 않습니다. THINGWORX globalScope 규칙이 적용됩니다.
GET /Thingworx/Things/WriteThing
THINGWORX, THINGWORX_THING_READ
THINGWORX globalScope과 첫 번째 uriScope 규칙이 적용됩니다.
POST /Thingworx/Things/WriteThing
THINGWORX, THINGWORX_THING_READ, THINGWORX_THING_WRITE
THINGWORX globalScope, 첫 번째 규칙 및 두 번째 uriScope 규칙이 적용됩니다.
PingFederate 연결 만들기: 리소스 공급자로서의 ThingWorx용 OAuth 클라이언트
OAuth 클라이언트는 PingFederate가 ThingWorx에 액세스 토큰을 제공하기 위한 연결 점입니다. 서비스 공급자는 이러한 액세스 토큰을 사용하여 ThingWorx에서 OAuth 보호된 리소스를 요청합니다.
1. PingFederate의 OAuth 설정 페이지에서 클라이언트를 선택하고 새로 만들기를 클릭합니다.
2. Client ID 필드에 값을 입력합니다. resourceServerSettings.json 파일을 구성할 때 ResourceServerSettings.accessTokenServicesSettings.clientId 매개 변수에 사용한 것과 동일한 값을 사용합니다.
3. 클라이언트 인증 섹션에서 클라이언트 보안을 선택하고 클라이언트 보안 값을 입력합니다. resourceServerSettings.json 파일을 구성할 때 ResourceServerSettings.accessTokenServicesSettings.clientSecret 매개 변수에 사용한 것과 동일한 값을 사용합니다.
4. 이름 필드에 값을 입력합니다. 이 값이 PingFederate 클라이언트 목록에 표시됩니다.
5. 설명 필드에 설명을 입력합니다.
6. 리디렉션 URIS 섹션을 비워 둡니다.
7. 권한 부여 유형 허용 섹션에서 리소스 소유자 암호 자격 증명액세스 토큰 유효성 검사(클라이언트가 리소스 서버임)를 선택합니다.
8. 기본 액세스 토큰 관리자 섹션에서 기본을 선택합니다.
9. 지속 권한 부여 만료 섹션에서 권한 부여가 만료되지 않음을 선택합니다.
10. Refresh Token Rolling Policy 섹션에서 Roll을 선택합니다.
11. 저장을 클릭합니다.
PingFederate에서의 범위 관리
1. PingFederate의 resourceServerSettings.json 파일에 언급된 모든 범위를 OAuth 설정 섹션의 범위 관리 페이지에 추가합니다(globalScopes 포함). 모든 범위에 대해 다음 단계를 반복합니다.
a. 범위 값 필드에 범위를 추가합니다.
b. 범위 설명 필드에 범위 설명을 추가합니다.
c. 추가를 클릭합니다.
d. 저장을 클릭합니다.
resourceServerSettings.json에서 범위 집합이 수정될 때마다 이에 따라 이 목록을 업데이트해야 합니다. 또한 ThingWorx에서 resourceServerSettings.json을 다시 로드하기 전에 이 목록을 업데이트하는 것이 좋습니다.
* 
ResourceServerSettings.globalScopes 아래의 resourceServerSettings.json 파일에서 범위가 정의되지 않은 경우 여기서(PingFederate) THINGWORX 범위를 기본 글로벌 범위의 THINGWORX로 추가해야 합니다.
ThingWorx를 수정된 resourceServerSettings.json 파일로 업데이트
resourceServerSettings.json 파일을 업데이트한 후 Tomcat을 다시 시작해야 합니다.
범위만 수정하는 경우(globalScopes 섹션과 uriScopes 섹션 모두) Tomcat을 다시 시작할 필요가 없습니다. 대신 다음 단계를 수행하십시오.
1. Composer에 관리자로 로그인합니다.
2. 인증자로 이동하여 ThingworxSSOAuthenticator를 엽니다.
3. 서비스를 엽니다.
4. ReloadResourceProviderScopes 서비스를 실행합니다.