Type de base Password
Le type de base PASSWORD est une valeur chiffrée basée sur le keystore.
Changements dans ThingWorx 8.2
Dans ThingWorx 8.2, la sécurité du type de base PASSWORD a été améliorée. Le type de base PASSWORD a été modifié en une valeur chiffrée basée sur keystore. Cette modification peut avoir un impact lors de l'importation et de l'exportation de mots de passe. Les bonnes pratiques sont décrites ci-dessous.
* 
Certains agents Edge ne sont pas compatibles avec le nouveau type de base PASSWORD en raison du modèle de sécurité renforcée qu'il introduit.
Le SDK C, le SDK .NET, EMS et le SDK iOS n'étaient pas en mesure d'accéder aux mots de passe avant cette modification et conservent ce comportement.
Avant ThingWorx 8.2, le SDK Java et le SDK Android pouvaient recevoir des mots de passe et disposaient de bibliothèques incluses pour déchiffrer les mots de passe une fois que les valeurs chiffrées atteignaient l'Edge. Avec cette modification, les valeurs chiffrées ne peuvent pas être reçues, ni déchiffrées. Si une valeur de type de base PASSWORD est envoyée sur l'Edge, une erreur se produit dans les SDK Java et Android lorsque l'Edge tente de déchiffrer le mot de passe.
Erreur JSDK pré-6.1 :
[O: c.t.t.d.u.ValueCollectionSerializer] [T: main] Error reading value collection data: Unable to read primitive value from stream : Decrypt ERROR: null JSDK
Erreur JSDK post-6.1 :
[L: ERROR] [O: c.t.t.d.u.ValueCollectionSerializer] [T: main] Error reading value collection data: Unable to read primitive value from stream : java.lang.IllegalArgumentException: No key store file path specified
* 
Le type de base PASSWORD ne doit pas être utilisé comme clé primaire dans une table de données.
Bonnes pratiques à suivre pour l'ajout de mots de passe dans des tables et flux de données
Lorsque vous ajoutez des entrées dans une table ou un flux de données à l'aide des services AddEntry (par exemple, AddIntegerStreamEntry) via le Composer ou l'API REST, les mots de passe doivent être chiffrés à l'aide de EncryptionServices.encryptPropertyValue. Par exemple,
// test password value
var test_password = "test_123"
// values:INFOTABLE(Datashape: test_shape)
var values = Things["test_table"].CreateValues();

var params = {
data: test_password /* STRING */
};
values.p1 = Resources["EncryptionServices"].EncryptPropertyValue(params);
values.s1 = "test_string"; //STRING [Primary Key]

var params = {
source : me.name,
values : values
};
Bonnes pratiques à suivre pour l'importation et l'exportation de mots de passe
Pour l'exportation et l'importation de mots de passe, utilisez le système d'exportation par défaut et assurez-vous que le même keystore est installé sur le système qui effectuera l'importation.
Si une exportation en texte brut des mots de passe est requise (recommandée uniquement pour la rotation des clés), l'exportation doit être effectuée via l'API REST et doit être traitée comme une exportation sensible.
* 
Attention : lors de l'exportation de mots de passe en texte brut, assurez-vous que le fichier est protégé de manière appropriée. Les exportations en texte brut n'offrent pas de sécurité intégrée.
Exemple d'appel d'API REST contenant un mot de passe en texte brut :
GET /Thingworx/Exporter/Users/test HTTP/1.1
Host: localhost:8080
Accept: text/xml
Content-Type: application/json
universal: password
Authorization: Basic XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX==
* 
Veillez à ne pas exporter des mots de passe en tant que clés primaires de tables de données.
* 
Si vous perdez la clé de chiffrement (keystore), toutes les données chiffrées seront perdues.
Bonnes pratiques à suivre pour la rotation des clés de mot de passe
Pour obtenir les bonnes pratiques en matière de rotation des clés, accédez au lien http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-57Pt3r1.pdf (en anglais).
Bonnes pratiques à suivre pour les mots de passe dans un scénario fédéré
Lors de la publication de mots de passe ou lorsque vous vous y abonnez dans un scénario fédéré, le chiffrement et le déchiffrement doivent utiliser la même clé de chiffrement du mot de passe. Si des clés différentes sont utilisées, le déchiffrement échouera sur le serveur fédéré et la propriété ne sera pas lue. Une erreur sera consignée si vous essayez d'utiliser la même clé de chiffrement.