NetSuite OAuth1.0签名REST API调用遇Cookie头设置拒绝错误求助
我已经查遍了所有相关文档和关于NetSuite TBA OAuth1.0签名的讨论帖,确认密钥创建正确、所有要求都满足,但调用接口时还是报**"Refused to set unsafe header 'Cookie'"**错误。
我已经做了这些尝试:
- 用Postman成功建立了连接
- 在Chrome中禁用CORS策略后发起请求
- 尝试了所有可能的基础字符串参数组合
我没法复现Postman生成的签名,但看到有帖子说这不一定代表我的实现有问题,因为Postman用了特定的内部参数/变量(不确定这个说法准不准)。
我严格遵循了Oracle官方文档,也参考了Stack Overflow上最接近的解决方案,但NetSuite已经不支持HMAC-SHA1了,所以我改用了HMAC-SHA256,其余参数都按要求提供(还额外加了文档里的部分参数)。
另外一个问题是所有示例都是PHP写的,我得转成JavaScript,但我从没用过PHP,不确定是不是编码方法搞错了。
以下是我的代码:
import axios from 'axios'; import { nanoid } from 'nanoid'; import hmacSHA256 from 'crypto-js/hmac-sha256' import base64 from 'crypto-js/enc-base64' function encodeRFC3986URIComponent(str: string) { return encodeURIComponent(str) .replace( /[!'()*]/g, (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}` ); } const parameters = { grant_type: "client_credentials", oauth_consumer_key: consumerKey, oauth_signature_method: "HMAC-SHA256", oauth_timestamp: timeStamp, oauth_token: accessToken, oauth_nonce: nonce, oauth_version: "1.0", }; const signatureKey = encodeURIComponent(consumerSecret) + '&' + encodeURIComponent(tokenSecret) console.log('signatureKey: ', signatureKey) var baseString = httpMethod + '&' + requestURL; for (const key in parameters) { baseString += "&" + key + "=" + parameters[key as keyof object]; } const encodedBaseString = encodeRFC3986URIComponent(baseString) const signature = base64.stringify(hmacSHA256(encodedBaseString, signatureKey)); let data = JSON.stringify({ "q": "SELECT id, entityid FROM employee WHERE custentity_time_badge = '12345'" }); let authorizationHeader = 'OAuth realm=' + OauthRealm for (const key in parameters) { authorizationHeader += ',' + key + "=" + parameters[key as keyof object]; } authorizationHeader += ',oauth_signature=' + signature authorizationHeader = JSON.stringify(authorizationHeader) let config = { method: 'post', maxBodyLength: Infinity, url: 'https://5283244-sb2.suitetalk.api.netsuite.com/services/rest/query/v1/suiteql', headers: { 'prefer': 'transient', 'Content-Type': 'application/json', 'Authorization': authorizationHeader, 'Cookie': 'NS_ROUTING_VERSION=LAGGING' }, data: data }; axios.request(config) .then((response) => { console.log(JSON.stringify(response.data)); }) .catch((error) => { console.log(error); });
内容的提问来源于stack exchange,提问作者adn
相关产品推荐
相关产品推荐

