Composer での ThingWorx モデルの定義 > セキュリティ > シングルサインオン認証 > リソースプロバイダとしての ThingWorx の設定
リソースプロバイダとしての ThingWorx の設定
ThingWorx をリソースプロバイダとして設定することで、OAuth2 プロトコルを介した ThingWorx URI リクエストが可能になります。
サービスプロバイダはリソースプロバイダからの応答を使用して、ThingWorx に保管されているデータをレンダーおよび表示できます。
リソースプロバイダとしての ThingWorx は、リソースリクエストごとにアクセストークンとスコープを検証します。
以降のセクションでは、ThingWorx でリソースプロバイダとしての ThingWorx を有効にするために必要なコンフィギュレーションステップについて説明します。この目的で設定されたその他のアプリケーションを設定するには、組織内でほかの PTC 製品を担当する管理者や ID プロバイダ管理者に相談する必要があります。
プロセスの概要
リソースプロバイダとして 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://<PingFederate のサーバー>:<PingFederate のポート>/as/token.oauth2
checkTokenEndpointUrl
PingFederate の OAuth トークンイントロスペクションエンドポイントを指定します (以下の図を参照)。
https://<PingFederate のサーバー>:<PingFederate のポート>/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
追加のスコープのコンマ区切りリスト。リストされているすべてのスコープ (グローバルを含む) への許可を持つユーザーだけがリソースを取得できます。
method
オプション。スコープが適用される URI メソッドを定義します。
* 
method プロパティが指定されていない場合、指定されている URI はすべての HTML メソッドでそのスコープによって保護されるものと見なされます。
REST プロトコルで使用可能なすべてのメソッド (GET や POST など) を値として指定できます。
URI に定義されているスコープがある場合、グローバルスコープおよび定義されている URI スコープで、そのリソースへのアクセスが許可されなければなりません。リクエストされたリソースに適用可能な URI 規則が複数存在する場合、関連するすべてのスコープでそのリソースへのアクセスが許可されなければなりません。制限されているリソースへのアクセスを防止するため、これらの REST エンドポイントに、認証サーバー (PingFed) に存在しない URI スコープを追加します。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 および 1 つ目の uriScope 規則が適用されます。
POST /Thingworx/Things/WriteThing
THINGWORX, THINGWORX_THING_READ, THINGWORX_THING_WRITE
THINGWORX globalScope および 1 つ目と 2 つ目の uriScope 規則が適用されます。
PingFederate 接続の作成: リソースプロバイダとしての ThingWorx 用 OAuth クライアント
OAuth クライアントは、PingFederate が ThingWorx にアクセストークンを提供するための接続ポイントです。サービスプロバイダは、これらのアクセストークンを使用して、OAuth によって保護されているリソースを ThingWorx からリクエストします。
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 Credentials」および「Access 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. resourceServerSettings.json ファイルに記載されている globalScopes を含むすべてのスコープを、PingFederate の「Scope Management」ページにある「OAuth Settings」セクションに追加します。各スコープで次の手順を繰り返します。
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 を再起動しなければなりません。
スコープだけ (globalScopes および uriScopes セクションの両方) を修正している場合、Tomcat を再起動する必要はありません。代わりに、以下の手順を実行します。
1. 管理者として Composer にログインします。
2. 「認証システム」に移動して ThingworxSSOAuthenticator を開きます。
3. サービスを開きます。
4. ReloadResourceProviderScopes サービスを実行します。