![](/img/trans.png)
[英]How can I sort this JavaScript object based on the name and then order by relevance?
[英]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)))
客戶端
Stringify:將javascript對象轉換為字符串
UTF-8:確保您使用的是已知且固定的編碼,例如utf
簽名:根據結果消息計算HMAC
base64:將二進制簽名轉換為base64
向客戶端發送json消息和簽名
服務器端
從客戶端獲取原始消息並應用步驟2-4。 檢查簽名是否相等
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.