2017-02-23 11 views
1

我正在開發一個套件,將NetSuite與沃爾瑪市場API集成。而且,正如另一個OP here所說的那樣,他們的文檔很多都說如果你不使用Java,那麼你就是你自己的。如何在NetSuite或JavaScript中解密私鑰的BASE64,PCKS-8表示?

我正在尋找一種方式來執行相同的無論是在suitescript或JavaScript。從沃爾瑪的API文檔

指令:

登錄該數據的字節數組表示:

解碼你的私鑰的基地64,PKCS-8表示。請注意,密鑰使用PKCS-8進行編碼。各種語言的庫提供了指定密鑰採用這種格式的能力,而不是PKCS-1等其他衝突格式。使用此密鑰的字節表示法使用SHA-256和RSA對數據進行簽名。編碼使用基地64

而且,一個java代碼從他們的文檔生成的簽名做同樣的:

public static String signData(String stringToBeSigned, String encodedPrivateKey) { 
    String signatureString = null; 
    try { 
     byte[] encodedKeyBytes = Base64.decodeBase64(encodedPrivateKey); 
     PKCS8EncodedKeySpec privSpec = new PKCS8EncodedKeySpec(encodedKeyBytes); 
     KeyFactory kf = KeyFactory.getInstance("RSA"); 
     PrivateKey myPrivateKey = kf.generatePrivate(privSpec); 
     Signature signature = Signature.getInstance("SHA256withRSA"); 
     signature.initSign(myPrivateKey); 
     byte[] data = stringToBeSigned.getBytes("UTF-8"); 
     signature.update(data); 
     byte[] signedBytes = signature.sign(); 
     signatureString = Base64.encodeBase64String(signedBytes); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return signatureString; 
} 

僅供參考,這裏的similar thing asked for dot net。任何幫助,將不勝感激。

+1

請從JavaScript重新標記爲Java。 – evolutionxbox

+0

我想我正在尋求JavaScript或Netsuite的幫助。我提供的Java代碼僅供參考。所以這應該只被標記爲JavaScript。如果我錯了,請糾正。 – Haxvik

回答

1

我曾嘗試在Javascript中開發一個SAML連接器,並發現了幾個庫處理不同的密鑰文件格式等。我得到了相當長的時間,但運行一些腳本的時間是令人難以置信的(想象嘗試登錄但過程花兩分鐘時間來決定你的登錄是否有效)

那時我切換到外部系統並使用Netsuite的入站SSO管理SSO。

即使使用SS 2.0,加密部門的NS看起來並沒有多大的改進。

我傾向於將其分爲兩部分。在Suitescript中生成文件,並通過處理簽名要求的基於Java的Web服務傳遞它們。最大限度地減少必須編寫的Java數量,並輕鬆控制事務提取/格式化腳本。

+0

是的,Java Web服務可以完成這項工作,但它需要額外的服務器/虛擬機來承載它。 如果我沒有得到任何其他的解決方案在JavaScript或套件,我可能不得不說服客戶相同。謝謝! – Haxvik

+0

這些日子,足夠的基礎設施來運行這個服務是相當便宜的。 EC2,linode,Heroku,可能lambda允許Java。任何這些也可以讓你在節點上做到這一點 – bknights

相關問題