簡體   English   中英

如何在javascript中的嵌套對象中對鍵的順序進行排序?

[英]How can I sort the order of key in a nested object in javascript?

問題是:我有如下參數請求:

{ "foo": "bar", "bar": "baz", "baz" : { "nestedKey": "foo" } }

我需要使用Hmac512算法對其進行簽名,因此需要首先對對象進行字符串化。

但是,我擔心的是,如果不保留密鑰的順序,則服務器和客戶端生成的簽名可能會不同。

為了解決這個問題,我的想法只是簡單地對對象的鍵進行排序(包括嵌套在該對象內部的鍵)。

我該如何實現?

如OP中所述,HMAC流程的輸入必須是確定性的。

但是,無論我們希望設置多少Javascript對象元素的順序,都無法設置。 (我經常看到這個問題。)

答案是對字符串本身進行排序。

有關解決方案,請參見json-stable-stringify

然后將結果字符串輸入HMAC方法。 無需對它進行base64編碼。

您需要確保雙方的信息都是相同的,但是您根本不需要修改或改寫該信息。

基本上應用這個算法

 base64(sign(utf8(json message)))

客戶端

  1. Stringify:將javascript對象轉換為字符串

  2. UTF-8:確保您使用的是已知且固定的編碼,例如utf

  3. 簽名:根據結果消息計算HMAC

  4. base64:將二進制簽名轉換為base64

向客戶端發送json消息和簽名

服務器端

從客戶端獲取原始消息並應用步驟2-4。 檢查簽名是否相等

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM