Chiffrement des mots de passe pour l'authentification unique
Pour utiliser le KeyStore, le fournisseur du KeyStore utilise un jeton sécurisé qui est stocké chiffré dans un fichier. Toutes les données écrites dans le KeyStore sont stockées en toute sécurité à l'aide du mot de passe. Au premier démarrage du fournisseur, celui-ci génère une valeur de mot de passe aléatoire et un fichier KeyStore s'ils n'existent pas déjà.
* 
L'accès au mot de passe du KeyStore et au fichier KeyStore doit être limité à l'utilisateur de l'application. Ce dernier doit disposer des droits d'accès en lecture/écriture aux fichiers.
* 
Les exemples ci-après sont basés sur Windows. Adaptez les commandes selon vos besoins si vous utilisez un serveur d'exploitation Linux.
Pour créer au préalable un fichier KeyStore et y stocker les données initiales, vous devez utiliser l' outil de gestion de la sécurité.
1. Téléchargez le fichier ZIP de l'outil de gestion de la sécurité depuis le site de support PTC. Si vous avez déjà installé cet outil, passez à l'étape 3.
2. Extrayez le contenu du fichier Zip dans un répertoire.
3. Créez un fichier de configuration avec les paramètres suivants, puis placez-le dans le dossier bin des fichiers dézippés.
* 
Dans cet exemple, le fichier est nommé keystore.conf, la version de l'outil est 1.0.0.36, et il se trouve dans C://security-common-cli-1.0.0.36/bin.
* 
Le paramètre default-encryption-key-length doit correspondre à la configuration de l'application. Dans ThingWorx, cela correspond au paramètre InternalAesCryptographicKeyLength qui se trouve dans le fichier platform-settings.json. La valeur par défaut est 128, mais vous pouvez définir le chiffrement 256 bits si vous utilisez Java 1.8.0_162 ou une version ultérieure. Si nécessaire, vous pouvez également utiliser les versions antérieures de Java en mettant à jour la politique Java en matière de limite de taille de clé.
{
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. Arrêtez le serveur ThingWorx.
5. Lancez une invite de commande en tant qu'administrateur et accédez à l'emplacement security-common-cli-1.0.0.36\bin.
6. Exécutez la commande suivante pour basculer sur l'invite du shell de l'outil :
C:\security-common-cli-1.0.0.36\bin> security-common-cli.bat <path to keystore>\keystore.conf
7. Exécutez le jeu de commandes ci-dessous pour insérer les mots de passe :
Mot de passe de la base de données :

> set encrypt.accesstoken.password <add-password-here>
Mot de passe du KeyStore (mot de passe pour sso-keystore.jks) :
> set encrypt.keystorestore.password <add-keystorestore-password-here>
Mot de passe des clés du KeyStore (mot de passe pour les clés dans sso-keystore.jks) :
> set encrypt.keystorekey.password <add-keystorekey-password-here>
Clé(s) secrète(s) client du/des fournisseur(s) de services : pour chaque AuthorizationServersSettings.<AuthorizationServerId> mentionné dans le fichier ThingworxPlatform/ssoSecurityConfig/sso-settings.json.

> set <AuthorizationServerId>.encrypt.SP.clientSecret <add-SP-clientSecret-here>
Par exemple, pour le fichier de configuration sso-settings.json ci-dessous, exécutez les commandes qui suivent :
"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
Clé secrète client du fournisseur de ressources (uniquement dans le cas où ThingWorx est configuré en tant que fournisseur de ressources) :
> set encrypt.RP.clientSecret <add-clientSecret-here>
8. Tapez exit pour quitter le mode shell :
> exit
9. Ouvrez le fichier /ThingworxPlatform/ssoSecurityConfig/sso-settings.json et effectuez les mises à jour suivantes :
Mot de passe de la base de données : sous AccessTokenPersistenceSettings, définissez la valeur de password sur :
"encrypt.accesstoken.password"
Mot de passe du KeyStore : sous KeyManagerSettings, définissez la valeur de keyStoreStorePass sur :
"encrypt.keystorestore.password"
Mot de passe des clés du KeyStore : sous KeyManagerSettings, définissez la valeur de keyStoreKeyPassvalue sur :
"encrypt.keystorekey.password"
Clé(s) secrète(s) client du/des fournisseur(s) de services : pour chaque AuthorizationServersSettings.<AuthorizationServerId>.clientSecret, définissez la valeur de clientSecret sur :
"encrypt.SP.clientSecret"
10. Si ThingWorx est configuré en tant que fournisseur de ressources, ouvrez le fichier /ThingworxPlatform/ssoSecurityConfig/resourceServerSettings.json et effectuez la mise à jour suivante :
Clé secrète client du fournisseur de ressources : sous ResourceServerSettings.accessTokenServicesSettings, définissez la valeur de clientSecret sur :
"encrypt.RP.clientSecret"
11. Démarrez le serveur ThingWorx.