应用程序密钥
应用程序密钥是在 ThingWorx 数据库中加密的安全标记,可用于登录 ThingWorx 应用程序,而无需使用标准凭据。
您可以在请求的 URL 标题上传递应用程序密钥令牌。该请求通过与应用程序密钥关联的用户安全上下文运行。默认情况下,使用应用程序密钥发出请求时不会创建会话。这是其他系统和应用程序向 ThingWorx 应用程序发出请求的推荐方式。但是,如果您希望创建会话,除了传入应用程序密钥令牌之外,还可以使用以下查询参数:x-thingworx-session=true
通过 URL 查看混搭并使用应用程序密钥时,应通过添加 x-thingworx-session=true 来创建会话。如果没有会话,则后续请求需要使用标准 HTTP 基本身份验证器进行身份验证。x-thingworx-session=true 查询参数之后包含 #mashup=[your mashup name]
* 
在创建应用程序密钥以及为其分配权限时,您应始终使用最低权限的安全概念。这不是向应用程序密钥分配管理员组成员的最佳做法。如果您尝试基于具有管理员权限的用户创建应用程序密钥,则将显示一条警告。
应用程序密钥属性
属性名称
说明
名称
标识此密钥的字或短语。必填字段。
头像
一种可以上载并以可视方式表示应用程序密钥的图像。
说明
应用程序密钥说明。
项目
与此密钥关联的工作或组。
标记
可用于对应用程序密钥进行分组或分类的模型标记。
IP 白名单
允许使用应用程序密钥访问 ThingWorx 的 IP 列表。使用逗号分隔各 IP。如果留空,则任何 IP 均可使用应用程序密钥。
客户端名称
可表示任何内容 (例如与应用程序密钥或 IP 地址关联的客户端) 的用户可定义字段。ThingWorx 会忽略分配给此字段的所有值。
用户名引用
与应用程序密钥关联的用户名。必填字段。
密钥 ID
ThingWorx 生成的密钥值。密钥 ID 不可编辑。
* 
密钥 ID 以加密方式存储在数据库中。用于对值进行加密的对称密钥存储在 /ThingworxStorage/keystore.jks,密钥库密码存储在 /ThingworxPlatform/keystore-password。如果这些文件不存在,则系统将生成这些文件。如果对称密钥不存在,则会在系统启动之前创建一个对称密钥。如果您正在安装和维护 ThingWorx 服务器,请确保保留这些文件。如果文件丢失,则应用程序密钥将不起作用,这意味着值在系统启动过程中无法加密,并且现有应用程序密钥也无法再保存或用于身份验证。
到期日期
应用程序密钥的到期日期。如果未指定到期日期,则使用 用户管理子系统中的默认值。对于 ThingWorx 8.1 及更高版本,如果未指定到期日期或用户管理子系统中的“应用程序密钥有效期 (秒)”值未更改,则应用程序密钥将在创建 24 小时后过期。
上次修改日期
最后一次修改应用程序密钥的日期和时间。
主混搭
与应用程序密钥关联的默认混搭。
文档
可选注释和背景信息,用于说明如何在环境中使用此功能的方式和原因。
创建应用程序密钥
要创建应用程序密钥,请遵循以下步骤。创建的密钥将采用“用户名引用”字段中授予关联用户的安全设置。
1. ThingWorx Composer 中,单击“新建”
2. 向下滚动并选择“应用程序密钥”
3. 键入一个“名称”
4. 可根据需要为此密钥选择或输入“说明”“项目”“标记”
5. “用户名引用”字段中,选择与应用程序密钥关联的用户。
6. 填充任何需要的可选字段,包括“IP 白名单”“客户端名称”“主混搭”“头像”“到期日期”“文档”
* 
如果未设置“到期日期”,则值将根据应用程序密钥实体的创建日期和用户管理子系统中的“应用程序密钥有效期 (秒)”设置进行计算。
7. 单击“保存”
8. 应用程序密钥显示在“密钥 ID”字段中。
删除应用程序密钥
虽然可以指定应用程序密钥的到期日期,但其失效时不会自动删除。您可以写入 ThingWorx 应用程序逻辑,以进行周期性迭代和删除失效的应用程序密钥。请参阅 应用程序密钥服务。要手动删除应用程序密钥:
1. 在 Composer 中,浏览全部内容。
2. 向下滚动到“安全”部分。
3. 如有必要,可展开该部分,并定位“应用程序密钥”
4. 通过单击名称左侧的复选框选择一个应用程序密钥。
5. 单击“删除”按钮。
通过服务创建应用程序密钥
要通过服务创建应用程序密钥,请使用下面的示例:
var params = {
clientName: undefined /* STRING */,
name: undefined /* STRING */,
description: undefined /* STRING */,
project: undefined /* STRING */,
whitelist: undefined /* STRING */,
user: undefined /* USERNAME */,
tags: undefined /* TAGS */,
expirationDate: undefined /* DATETIME */
};
// no return
Resources["EntityServices"].CreateApplicationKey(params);
//Get the generated Key's actual appKey value
var KeyID = ApplicationKeys["YOURKEYNAME"].GetKeyID();
* 
如果未设置“到期日期”,则值将根据应用程序密钥实体的创建日期和用户管理子系统中的“应用程序密钥有效期 (秒)”设置进行计算。
初始应用程序密钥设置和初次连接的最佳做法
应尽可能使设备始终在开发沙盒中保持联机状态或进行模拟。一旦设备准备好生产,即应为应用程序边缘网络上的每个设备创建新的应用程序密钥。在创建了一个唯一的应用程序密钥并将其部署到相关设备后,应在初始化该设备时对其进行监控,以确认它是否已成功连接到该平台。
应用程序密钥到期和旋转
作为最佳做法,应用程序密钥应具有有限的到期日期,该日期与将使用应用程序密钥凭据的设备的预期生命周期相匹配。此外,不建议对多个设备使用相同的应用程序密钥,尤其是在这些设备的生命周期不同时。应用程序密钥到期后,应在设备上安装新的应用程序密钥。
关键应用程序的应用程序密钥到期
如果不存在将新的应用程序密钥交付到设备的系统,则可以更新应用程序密钥上的到期密钥,以延长使用期限。这并非推荐的最佳做法,但可用作关键业务数据可能丢失时的解决方法。请务必注意,延长应用程序密钥的生命周期时,如果超出了设备的预计生命周期,则可能会对关键应用程序基础结构造成安全威胁。
相关链接