1

Ich arbeite an einem SuiteScript, um NetSuite mit den Walmart Marketplace APIs zu integrieren. Und, wie das andere OP here sagt es richtig ihre Dokumentation sagt ziemlich viel, wenn Sie Java nicht verwenden, sind Sie auf eigene Faust.Wie dekodiere ich eine BASE64, PCKS-8 Darstellung eines privaten Schlüssels in NetSuite oder Javascript?

Ich bin auf der Suche nach einer Möglichkeit, das gleiche entweder in suitescript oder Javascript zu tun.

Anweisung von Walmart-API-Dokumentation:

das Byte-Array-Zeichen Darstellung dieser Daten durch:

Dekodierung der Base 64, PKCS-8 Darstellung Ihrer privaten Schlüssel. Beachten Sie, dass der Schlüssel mit PKCS-8 codiert ist. Bibliotheken in verschiedenen Sprachen bieten die Möglichkeit anzugeben, dass der Schlüssel in diesem Format und nicht in anderen in Konflikt stehenden Formaten wie PKCS-1 enthalten ist. Verwenden Sie diese Byte-Darstellung Ihres Schlüssels, um die Daten unter Verwendung von SHA-256 mit RSA zu signieren. Encode die resultierende Signatur Basis 64.

Und ein Java-Code aus ihrer Dokumentation das gleiche zu tun:

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; 
} 

als Referenz, hier ist der similar thing asked for dot net. Jede Hilfe wäre willkommen.

+1

Bitte tag von JavaScript zu Java neu. – evolutionxbox

+0

Ich denke, ich suche nach Hilfe nur in Javascript oder Netsuite. Der Java-Code, den ich zur Verfügung gestellt habe, dient nur als Referenz. Dies sollte also nur mit Javascript getaggt werden. Bitte korrigieren Sie, wenn ich falsch liege. – Haxvik

Antwort

1

Ich habe einmal versucht, einen SAML-Konnektor in Javascript zu entwickeln und mehrere Bibliotheken zu finden, die sich mit verschiedenen Schlüsseldateiformaten usw. befassen. Ich bin ziemlich weit gekommen, aber die Zeit, einige der Skripte auszuführen, war unglaublich (stell dir vor, wie man sich anmeldet Es dauerte zwei Minuten, um zu entscheiden, ob Ihr Login gültig war.)

An diesem Punkt wechselte ich zu einem externen System und verwaltete das SSO mit dem eingehenden SSO von Netsuite.

Es sieht nicht so aus, als hätten sich die Dinge mit NS in der Kryptoabteilung sogar mit SS 2.0 so sehr verbessert.

Ich würde dazu neigen, dies in zwei Teile zu verpacken. Generieren Sie Ihre Dateien in Suitescript und übergeben Sie sie über einen Java-basierten Webdienst, der die Signieranforderungen verarbeitet. Minimiert die Menge an Java, die Sie schreiben müssen, und hält Ihre Transaktionsextraktions-/Formatierungsskripte unter Kontrolle.

+0

Ja, ein Java-Webdienst kann die Aufgabe erledigen, benötigt jedoch zusätzliche Server/VM, um ihn zu hosten. Wenn ich keine andere Lösung in Javascript oder Suitescript bekomme, muss ich wahrscheinlich den Client für das gleiche überzeugen. Vielen Dank! – Haxvik

+0

Ausreichende Infrastruktur, um dies zu betreiben, ist heutzutage ziemlich günstig. EC2, Linode, Heroku, möglicherweise Lambda erlaubt Java. Irgendeines von denen würde dich das auch im Knoten tun lassen – bknights

Verwandte Themen