我正在编写一份成绩单,以便将NetSuite与沃尔玛市场API集成起来。而且,正如另一个OP 这里所说的那样,他们的文档很大程度上说,如果您不使用Java,您就只能靠自己了。
我正在寻找一种方法,以同样的方式,无论是在行李本或javascript。
来自沃尔玛API文档的说明:
通过以下方式对此数据的字节数组表示形式进行签名: 解码基地64,PKCS-8表示您的私钥。注意,密钥是使用PKCS-8编码的。各种语言的库提供了一种能力,可以指定键是这种格式的,而不是其他冲突的格式,例如PKCS-1。使用密钥的这个字节表示来使用RSA使用SHA-256对数据进行签名。使用Base 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;
}供参考,这是类似的东西要求点网。任何帮助都将不胜感激。
发布于 2017-02-23 21:00:11
我试着用Javascript开发了一个SAML连接器,并找到了几个处理不同密钥文件格式等的库。我做了相当长的工作,但是运行一些脚本的时间令人难以置信(想象一下尝试登录,但是这个过程需要两分钟才能确定您的登录是有效的)
这时,我切换到了一个外部系统,并使用Netsuite的入站SSO管理SSO。
看起来,即使使用SS2.0,密码部门的NS也没有那么大的改进。
我倾向于把它分为两部分。在Suitescript中生成您的文件,并通过一个基于java的web服务来处理签名要求。最小化您必须编写的Java量,并将事务提取/格式化脚本保持在易于控制的范围内。
发布于 2019-06-07 17:00:02
我找到了一个库(jsrsa符号),它将在4秒内从NetSuite服务器端完成沃尔玛的签名!(市场已经转到了OAuth2,但我被困在了作为空投船供应商的签名上)
/**
*@NApiVersion 2.x
*@NScriptType ScheduledScript
*/
define(['N/log', 'N/https', '../lib/jsrsasign-master/jsrsasign-all-min'],
function(log, https) {
function execute(context) {
var pkcs8Der = {Your Walmart Private Key};
var pkcs8Pem = [
'-----BEGIN PRIVATE KEY-----',
pkcs8Der.match(/.{0,64}/g).join('\n'),
'-----END PRIVATE KEY-----'
].join('\n');
var tStamp = Date.now()
var stringToSign = [
tStamp,
{Your Walmart Comsumer Id},
{Request URL},
{Request Method (All Caps)}
].join('\n') + '\n';
var sig = new KJUR.crypto.Signature({"alg": "SHA256withRSA"});
sig.init(pkcs8Pem);
var sigVal = hextob64(sig.signString(stringToSign));
log.audit({title: 'Signature', details: sigVal});
log.audit({title: 'Timestamp', details: tStamp});
}
return {
execute: execute,
};
}
);我必须将以下代码添加到jsrsasign-all-min.js库文件中,以便按计划的脚本加载模块:
var navigator = {}, window = undefined;https://stackoverflow.com/questions/42416709
复制相似问题