Composer 中的 ThingWorx 模型定義 > 安全性 > 單一登入驗證 > 將 ThingWorx 配置為資源提供者
將 ThingWorx 配置為資源提供者
您可以將 ThingWorx 配置為資源提供者,以允許透過 OAuth2 通訊協定發出 ThingWorx URI 請求。
服務提供者可以使用資源提供者的回應,來轉譯及顯示儲存在 ThingWorx 中的資料。
作為資源提供者的 ThingWorx 負責驗證每個資源請求的存取權杖與範圍。
接下來的部份將描述在 ThingWorx 中使 ThingWorx 作為資源提供者所需的組態步驟。您可能需要諮詢其他 PTC 產品管理員和貴組織中的識別提供者管理員,以便配置針對此目的配置的其他應用程式。
流程概觀
遵循下列流程來將 ThingWorx 配置為資源提供者:
1. 配置單一登入。這是此流程的先決條件。
* 
強烈建議使用 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 規則適用于請求的資源,則必須對所有相關範圍授與權限,才能存取該資源。為了避免存取受限資源,請將 URIscope 新增至這些範圍不存在於授權伺服器 (例如 PingFed) 中的 REST 端點。除了範圍保護以外,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 Settings 頁上,選取 Clients,然後按一下 Create New
2. Client ID 欄位中,輸入一個值。請使用您在配置 resourceServerSettings.json 檔案時用於 ResourceServerSettings.accessTokenServicesSettings.clientId 參數的相同值。
3. Client Authentication 部份,選取 Client Secret,然後輸入用戶端密碼值。請使用您在配置 resourceServerSettings.json 檔案時用於 ResourceServerSettings.accessTokenServicesSettings.clientSecret 參數的相同值。
4. Name 欄位中,輸入一個值。它會顯示在 PingFederate 用戶端清單中。
5. Description 欄位中,輸入描述。
6. Redirect URIS 部份保留空白。
7. Allow Grant Types 部份,選取 Resource Owner Password CredentialsAccess Token Validation (Client is a Resource Server)
8. Default Access Token Manager 部份,選取 default
9. Persistent Grants Expiration 部份裡,選取 Grants Do Not Expire
10. Refresh Token Rolling Policy 部份,選取 Roll
11. 按一下 Save
PingFederate 中的範圍管理
1. 在 PingFederate 中,將 resourceServerSettings.json 檔案中提到的所有範圍加到 OAuth Settings 部份的 Scope Management 頁,包括 globalScopes。針對每個範圍重複下列步驟:
a. Scope Value 欄位中新增範圍。
b. Scope Description 欄位中新增範圍描述。
c. 按一下 Add
d. 按一下 Save
每次在 resourceServerSettings.json 中修改一組範圍時,您都必須相應更新此清單。在 ThingWorx 中重新載入 resourceServerSettings.json 之前,也建議您更新此清單。
* 
如果未在 resourceServerSettings.json 檔案的 ResourceServerSettings.globalScopes 下定義範圍,必須在此 (在 PingFederate 中) 將 THINGWORX 範圍新增為預設範圍中的 THINGWORX
使用已修改的 resourceServerSettings.json 檔案更新 ThingWorx
更新 resourceServerSettings json 檔案之後,您必須重新啟動 Tomcat。
如果您只是修改範圍 (globalScopesuriScopes 部份),不需要重新啟動 Tomcat。請執行下列步驟:
1. Administrator 身分登入 Composer。
2. 轉至「驗證器」並開啟 ThingworxSSOAuthenticator
3. 開啟服務。
4. 執行 ReloadResourceProviderScopes 服務。