function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
Kiran Naidu 7Kiran Naidu 7 

NetSuite oauth1.0 - oauth_signature_method= hmac-sha256

Hi All,
I am trying to integrate salesforce with Netsuite using Oauth 1.0 with oauth_signature_method= hmac-sha256 
I have the below code and trying to Get the Customer details

String nonce = String.valueOf(Crypto.getRandomLong());
String tnow = String.valueOf(DateTime.now().getTime()/1000);
String baseString = '7156829&ecbb91e9da54d2fb032284c475a19359ab93bf7f4f9397ee0f88de66c8408e7f&b8410d1e3f16268240a7627f26b60b54c8e089109340ffaf892ba916ca2c1b93&'+nonce+'&'+tnow+'';
system.debug('baseString'+ baseString);
String consumerSecret = '4ed07ff01980f0aa7afaaabba0d754769206ababb3e6155cf4908b7c3784caba';
String tokenSecret = '9f0c2fd6348a851dc1054f243da4883b9588c6724a4a65f0999c008bcd09dd5c';
String signingkey = consumerSecret+'&'+tokenSecret;
system.debug('signingkey'+ signingkey);
//Blob sig = Crypto.generateMac('hmacSHA256', Blob.valueOf(baseString), Blob.valueOf(consumerSecret+'&'+(tokenSecret!=null ? tokenSecret : '')));
Blob sig = Crypto.generateMac('hmacSHA256', Blob.valueOf(baseString), Blob.valueOf(signingkey));
String signature = EncodingUtil.urlEncode(EncodingUtil.base64encode(sig), 'UTF-8');
system.debug('sig'+ sig);        
System.debug('Signature: '+signature);
            Http http = new Http();
            HttpRequest request = new HttpRequest();
            String AuthString = 'OAuth realm=XXXXXXX", oauth_consumer_key="ecbb91e9da54d2fb032284c475a19359ab93bf7f4f9397ee0f88de66c8408e7f", oauth_token="b8410d1e3f16268240a7627f26b60b54c8e089109340ffaf892ba916ca2c1b93", oauth_signature_method="HMAC-SHA256", oauth_timestamp="'+tnow+'", oauth_nonce="'+nonce+'", oauth_version="1.0", oauth_signature="'+signature+'"';
            System.debug('Authorization: '+AuthString);
            request.setEndpoint('https://xxxxxx.suitetalk.api.netsuite.com/services/rest/record/v1/customer/7');
            request.setMethod('GET');
            request.setHeader('Authorization', AuthString);
            //request.setHeader('Content-Type', 'application/x-www-form-urlencoded');
            HttpResponse response = http.send(request);
            System.debug(response.getBody());


but I get below Error

{"type":"https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.2","title":"Unauthorized","status":401,"o:errorDetails":[{"detail":"Invalid login attempt.","o:errorCode":"INVALID_LOGIN_ATTEMPT"}]}

I verified Audit log in NetSuite and I see "Invalid Signature"

Can anyone help/suggest me to fix this issue.
SwethaSwetha (Salesforce Developers) 
HI Kiran,
The issue here seems that the endpoint denying the Login Attempt. Can you try to send this request via Postman to isolate if it is an issue from the endpoint team/IP restrictions?

Related: https://help.salesforce.com/articleView?id=sf.remoteaccess_oauth_1_flows.htm&type=5

Similar post from past: https://salesforce.stackexchange.com/questions/103564/oauth-consumer-key-and-or-signature-not-included-in-request-parameters-or-author/103592#103592

Also recommend ensuring the parameter being passed in below line of your code is following the right syntax
String AuthString = 'OAuth realm=XXXXXXX",



If this information helps, please mark the answer as best. Thank you
Kiran Naidu 7Kiran Naidu 7
Hi Swetha,

Using postman, I am successful in getting response.
String AuthString = 'OAuth realm=XXXXXXX",// I am using Account Id value here just that I could not share that information here replaced with XXXXXXX
I have tried possible ways, but still I see the same issue. 
Lavanya K 15Lavanya K 15
Hi Kiran, 
Were you able to fix this issue? I'm facing the same issue when switching the authentication method to HMAC256.

Thanks,
Lavanya
Kiran Naidu 7Kiran Naidu 7
I am still having the same issue with Netsuite Rest Webservice and tryinn to investigate, but I am able to connect with Netsuite Reslets.
N WN W

Kiran,

Can you sare the code used to Authenticat with Restlets?

I am getting an InvalidTimestamp Error

Vishnu Sharma 43Vishnu Sharma 43
Hi, Kiran, this issue is the same still?