密碼基礎類型
PASSWORD 基礎類型是以金鑰庫為基礎的加密值。
ThingWorx 8.2 中的變更
在 ThingWorx 8.2 中,PASSWORD 基礎類型的安全性已改善。PASSWORD 基礎類型已變更為已以金鑰庫為基礎的加密值。在匯入及匯出密碼時,此變更可能會有一定意義。最佳作法會在下面進行說明。
* 
某些 Edge 代理程式會因安全性較強的模型,而與新 PASSWORD 基礎類型不相容。
C SDK、.NET SDK、EMS 與 iOS SDK 在進行此變更之前無法存取密碼,進行變更之後仍無法存取。
在 ThingWorx 8.2 之前,Java SDK 與 Android SDK 可在加密值到達 Edge 時,接收密碼與所含程式庫,進而解密密碼。在此變更之後,無法接收或解密加密值。如果將密碼基礎類型值傳送至 Edge,當 Edge 嘗試解密密碼時,將在 Java 與 Android SDK 中觸發錯誤。
JSDK 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
JSDK 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
* 
PASSWORD 基礎類型不應作為資料表中的主索引鍵使用。
將密碼新增至資料表與串流時的最佳作法
使用 AddEntry 服務 (例如,AddIntegerStreamEntry),透過 Composer 或 REST API 將項目新增至資料表或串流時,必須使用 EncryptionServices.encryptPropertyValue 加密密碼。例如,
// 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
};
匯入及匯出密碼的最佳作法
匯入及匯出密碼時,請使用預設匯出系統,並確保在執行匯入的系統中安裝相同的 keystore。
如果需要以純文字匯出密碼 (建議僅用於金鑰輪替),則必須透過 REST API 執行匯出,且應將其視為機密資訊。
* 
注意:匯出純文字密碼時,請確保以適當方式保護檔案。純文字匯出不包含內建安全性。
包含純文字密碼之 REST API 呼叫的範例如下:
GET /Thingworx/Exporter/Users/test HTTP/1.1
Host: localhost:8080
Accept: text/xml
Content-Type: application/json
universal: password
Authorization: Basic XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX==
* 
請勿將密碼匯出為資料表中的主索引鍵。
* 
如果您遺失加密金鑰 (金鑰庫),則所有加密資料也將遺失。
密碼金鑰輪替的最佳作法
聯合情境中密碼的最佳作法
在聯合情境中發佈或訂閱密碼時,只有在您使用相同密碼加密金鑰的情況下,才能成功加密與解密。如果金鑰不同,將無法在聯合伺服器中成功解密,也無法讀取內容。如果您嘗試使用相同加密金鑰,將記錄錯誤。