将 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": {
"userAuthenticationConverterUserNameAttribute": "See information in the table below",
"checkTokenEndpointUrl": "https://<pingfed.server>:9031/as/introspect.oauth2",
"clientId": "See information in the table below",
"clientSecret": "See information in the table below"
},
"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 设置
参数
说明
userAuthenticationConverterUserNameAttribute
可选。定义包含 user ID 的字段名称。如果未设置该属性,则默认值为 username
checkTokenEndpointUrl
必备。
指定 PingFederate 的 OAuth 令牌内省端点 (请参阅下图)。
https://<pingfed.server>:<pingfed.port>/as/introspect.oauth2
clientId
必备。
指定通过身份验证服务器验证访问令牌时使用的客户端标识符。
clientSecret
必备。
客户端密码值。
administratorAlias
可选。
若要通过 ThingWorx 管理员访问 RP,则为必要参数。
* 
如果已在 sso-settings.json 文件中进行了配置,则无需在此处设置值。
PingFederate 中配置的管理员用户名。
administratorInternalName
可选。
ThingWorx 中配置的管理员用户名。
管理员
ResourceServerSettings.globalScopes 设置
参数
说明
示例
globalScopes
以逗号分隔的全局范围的列表。包括访问任何资源所需的最小范围集。如果此参数缺失或为空,则会将 THINGWORX 设置为默认全局范围。请勿将此参数留空。如果没有专用范围,则会将 THINGWORX 设置为值。
"globalScopes": "THINGWORX"
"globalScopes": "THINGWORX_APP1,THINGWORX_APP2"
ResourceServerSettings.uriScopes 设置
参数
说明
示例
uri
URI 模式。将需要其他范围的资源或资源组定义为全局范围。
/Things/** - control all Things
/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": "/Things/**",
"scopes": "THINGWORX_THING_READ"
},
{
"uri": "/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 中,搜索 Clients。打开搜索结果 Clients-Application > OAuth,然后单击 Add Client
2. CLIENT ID 字段中,输入一个值。请使用在配置 resourceServerSettings.json 文件时针对 ResourceServerSettings.accessTokenServicesSettings.clientId 参数使用的相同参数值。
3. NAME 字段中,输入一个值。此值会显示在 PingFederate 客户端列表中。
4. DESCRIPTION 字段中,输入说明。
5. CLIENT AUTHENTICATION 部分中,选择 CLIENT SECRET,然后输入客户端密码值。请使用在配置 resourceServerSettings.json 文件时针对 ResourceServerSettings.accessTokenServicesSettings.clientSecret 参数使用的相同参数值。
6. REDIRECT URIS 部分留空。
7. ALLOWED GRANT TYPES 部分中,选择 Resource Owner Password CredentialsAccess Token Validation (Client is a Resource Server)
8. DEFAULT ACCESS TOKEN MANAGER 部分中,选择 default
9. PERSISTENT GRANTS MAX LIFETIME 部分中,选择 Use Global Setting
10. REFRESH TOKEN ROLLING POLICY 部分中,选择 Roll
11. 单击保存
PingFederate 中的范围管理
1. 在 PingFederate 中,将 resourceServerSettings.json 文件中提到的所有范围附加到 OAuth 设置部分中的范围管理页面,其中包括 globalScopes。对每个范围重复以下步骤:
1. Scope Value 字段中添加范围。
2. Scope Description 字段中添加范围说明。
3. 单击“添加”
4. 单击保存
每次在 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 服务。
这对您有帮助吗?