SSO のパスワードの暗号化
キーストアを操作するため、キーストアプロバイダは暗号化された状態でファイルに保管されているセキュアトークンを使用します。キーストアに書き込まれたすべてのデータは、パスワードを使用して安全に保管されます。プロバイダを最初に起動したときに、ランダムパスワード値とキーストアファイルが生成されます (まだ存在しない場合)。
* 
キーストアのパスワードとキーストアファイルはアプリケーションユーザーのみに公開されます。アプリケーションユーザーはこれらのファイルに対する読み取り/書き込みのアクセス許可を持っている必要があります。
* 
以下の例は Windows ベースです。Linux ベースの OS を使用している場合、必要に応じてコマンドを変更してください。
キーストアファイルを事前に作成し、そこに初期データを保管するには、 セキュリティ管理ツールを使用する必要があります。
1. PTC サポートサイトからセキュリティ管理ツールの ZIP ファイルを入手します。このツールをすでにインストールしている場合、手順 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. 次のコマンドを実行して、このツールのシェルプロンプトに切り替えます。
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>
キーストアのストアパスワード (sso-keystore.jks のパスワード):
> set encrypt.keystorestore.password <add-keystorestore-password-here>
キーストアのキーパスワード (sso-keystore.jks 内のキーのパスワード):
> set encrypt.keystorekey.password <add-keystorekey-password-here>
サービスプロバイダのクライアントシークレット: /ThingworxPlatform/ssoSecurityConfig/sso-settings.json ファイルで指定されている AuthorizationServersSettings.<認証サーバー ID> ごと。

> 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」と入力してシェルモードを終了します。
> exit
9. /ThingworxPlatform/ssoSecurityConfig/sso-settings.json を開き、以下の更新を行います。
データベースパスワード: AccessTokenPersistenceSettings で、password の値を以下に変更します。
"encrypt.accesstoken.password"
キーストアのストアパスワード: KeyManagerSettings で、keyStoreStorePass の値を以下に変更します。
"encrypt.keystorestore.password"
キーストアのキーパスワード: KeyManagerSettings で、keyStoreKeyPassvalue の値を以下に変更します。
"encrypt.keystorekey.password"
サービスプロバイダのクライアントシークレット: AuthorizationServersSettings.<認証サーバー ID>.clientSecret ごとに、clientSecret の値を以下に変更します。
"encrypt.SP.clientSecret"
10. ThingWorx がリソースプロバイダとして設定されている場合、/ThingworxPlatform/ssoSecurityConfig/resourceServerSettings.json ファイルを開いて次の更新を行います。
リソースプロバイダのクライアントシークレット: ResourceServerSettings.accessTokenServicesSettings で、clientSecret の値を以下に変更します。
"encrypt.RP.clientSecret"
11. ThingWorx サーバーを起動します。