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 添加到这些 REST 端点,使得端点的范围在授权服务器 (例如 PingFed) 中不存在。除范围保护外,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. 单击 保存
PingFederate 中的范围管理
1. 在 PingFederate 中,将 resourceServerSettings.json 文件中提到的所有范围附加到 OAuth 设置部分中的范围管理页面,其中包括 globalScopes。对每个范围重复以下步骤:
a. Scope Value 字段中添加范围。
b. Scope Description 字段中添加范围说明。
c. 单击 Add
d. 单击 保存
每次在 resourceServerSettings.json 中对一组范围进行修改后,您必须相应地更新此列表。此外,建议您在 ThingWorx 中重新加载 resourceServerSettings.json 之前更新此列表。
* 
如果未在 ResourceServerSettings.globalScopes 下的 resourceServerSettings.json 文件中定义范围,则必须在此处 (在 PingFederate 中) 将 THINGWORX 范围添加为默认全局范围中的 THINGWORX
使用已修改的 resourceServerSettings.json 文件更新 ThingWorx
更新 resourceServerSettings.json 文件后,必须重新启动 Tomcat。
如果只修改范围 (globalScopesuriScopes 部分),则无需重新启动 Tomcat。而是需要执行下列步骤:
1. Administrator 身份登录到 Composer。
2. 转至身份验证器,然后打开 ThingworxSSOAuthenticator
3. 打开服务。
4. 执行 ReloadResourceProviderScopes 服务。