加密 SSO 密码
为了使用 KeyStore,KeyStore 提供程序使用以加密方式存储在文件中的安全令牌。写入 KeyStore 的所有数据都将通过密码进行安全存储。第一次启动此提供程序时,将生成随机密码值和 KeyStore 文件 (若尚未存在)。
* 
KeyStore 密码和 KeyStore 文件应仅限于应用程序用户使用。应用程序用户必须具有该文件的读取/写入权限。
* 
以下是基于 Windows 的示例。如果您使用的是基于 Linux 的操作系统,请根据需要更改命令。
要事先创建 KeyStore 文件并在其中存储初始数据,您必须使用 安全管理工具
1. PTC 支持站点获取 Security Management Tool 压缩文件。如果已经安装了此工具,请跳转至步骤 3。
2. 将 ZIP 文件中的内容解压缩至某一目录。
3. 通过以下参数创建配置文件,并将其置于解压缩文件的 bin 文件夹中。
* 
在本示例中,该文件的文件名为 keystore.conf,该工具的版本为 1.0.0.36,其位于 C://security-common-cli-1.0.0.36/bin
* 
default-encryption-key-length 必须同应用程序配置相匹配。在 ThingWorx 中,它是位于 platform-settings.json 中的 InternalAesCryptographicKeyLength 参数。默认值为 128,但如果您使用的是 Java 1.8.0_162 或更高版本,则可使用 256 位加密。如有必要,您还可以通过更新密钥大小限制的 Java 策略来使用较旧的 Java 版本。
{
security {
secret-provider = "com.thingworx.security.provider.keystore.KeyStoreProvider"
default-encryption-key-length = 128
keystore {
password-file-path = "/ThingworxPlatform/ssoSecurityConfig"
password-file-name = "keystore-password"
path = "/ThingworxPlatform/ssoSecurityConfig"
name = "_sso_keystore"
}
}
}
4. 停止 ThingWorx 服务器。
5. 启动命令提示符作为管理员并转至 security-common-cli-1.0.0.36\bin 位置。
6. 运行以下命令以切换到工具的 shell 提示:
C:\security-common-cli-1.0.0.36\bin> security-common-cli.bat <path to keystore>\keystore.conf
7. 运行下面的命令集以插入密码:
数据库密码:

> set encrypt.accesstoken.password <add-password-here>
KeyStore 存储密码 (sso-keystore.jks 的密码):
> set encrypt.keystorestore.password <add-keystorestore-password-here>
KeyStore 密钥密码 (sso-keystore.jks 中密钥的密码):
> set encrypt.keystorekey.password <add-keystorekey-password-here>
服务提供者客户端密码:适用于每个 AuthorizationServersSettings。<AuthorizationServerId> (如 /ThingworxPlatform/ssoSecurityConfig/sso-settings.json 文件中所述)。

> set <AuthorizationServerId>.encrypt.SP.clientSecret <add-SP-clientSecret-here>
例如,对于下面的 sso-settings.json 配置文件,请运行其后面的命令:
"AuthorizationServersSettings": {
"PingFed1": {
"clientId": "twx-sp-client-1",
"clientSecret": "twx-sp-client_1234",
"authorizeUri": "https://pingfed1.com:9031/as/authorization.oauth2",
"tokenUri": "https://pingfed1.com:9031/as/token.oauth2",
"clientAuthScheme": "form"
},
"PingFed2": {
"clientId": "twx-sp-client-2",
"clientSecret": "twx-sp-client_123456",
"authorizeUri": "https://pingfed2.com:9031/as/authorization.oauth2",
"tokenUri": "https://pingfed2.com:9031/as/token.oauth2",
"clientAuthScheme": "form"
}
}

Run:
> set PingFed1.encrypt.SP.clientSecret twx-sp-client_1234
> set PingFed2.encrypt.SP.clientSecret twx-sp-client_123456
资源提供者客户端密码 (仅在将 ThingWorx 配置为资源提供者的情况下):
> set encrypt.RP.clientSecret <add-clientSecret-here>
8. 键入 exit 以退出 shell 模式:
> exit
9. 打开 /ThingworxPlatform/ssoSecurityConfig/sso-settings.json 并进行以下更新:
数据库密码:在 AccessTokenPersistenceSettings 下,将 password 值更改为:
"encrypt.accesstoken.password"
KeyStore 存储密码:在 KeyManagerSettings 下,将 keyStoreStorePass 值更改为:
"encrypt.keystorestore.password"
KeyStore 密钥密码:在 KeyManagerSettings 下,将 keyStoreKeyPassvalue 更改为:
"encrypt.keystorekey.password"
服务提供者客户端密码:适用于每个 AuthorizationServersSettings。<AuthorizationServerId>.clientSecret,将 clientSecret 值更改为
"encrypt.SP.clientSecret"
10. 如果已将 ThingWorx 配置为资源提供者,请打开 /ThingworxPlatform/ssoSecurityConfig/resourceServerSettings.json 文件,然后进行以下更新:
资源提供者客户端密码:在 ResourceServerSettings.accessTokenServicesSettings 下,将 clientSecret 值更改为:
"encrypt.RP.clientSecret"
11. 启动 ThingWorx 服务器。