Discussions
Read on for the latest updates including:
• Agenda Builder launch
• SuiteWorld On Air registration
• New NetSuite Prompt Studio Contest
• And more!
Check out this thread to learn more!
SuiteQL HMAC-SHA256 signature
Hi. I'm working on c# SuiteQL rest application. Recently we've got error, that we need to change signature from HMAC-SHA1 to HMAC-SHA256.
Currently, we are using for creating signature Google api - OAuthBase.GenerateSignature. But, this method can't create HMAC-SHA256.
I've been looking through many different solutions, how to create signature manually, but all of them doesn't allow me to create request to NetSuite, i've got "InvalidSignature" error.
This is my current code:
//Creating signature and header var signature = GenerateSignature(consumerKey,ConfigurationManager.AppSettings["login.tbaConsumerSecret"], ConfigurationManager.AppSettings["login.tbaTokenSecret"],nonce,time, tokenId, ConfigurationManager.AppSettings["login.acct"]).Replace("+", "%2B"); var header = $"Authorization: OAuth oauth_signature=\"{signature}\", oauth_version=\"1.0\", oauth_nonce=\"{nonce}\", oauth_signature_method=\"HMAC-SHA256\", oauth_consumer_key=\"{consumerKey}\", oauth_token=\"{tokenId}\",oauth_timestamp=\"{time}\", realm=\"{ConfigurationManager.AppSettings["login.acct"]}\""; //Generating signature private static string GenerateSignature(string consumerKey, string consumerSecret, string tokenSecret, string nonce, string timestamp, string token, string acct) { var baseString = $"{acct}&{consumerKey}&{token}&{nonce}&{timestamp}"; var key = consumerSecret + "&" + tokenSecret; string signature; var encoding = new ASCIIEncoding(); var keyBytes = encoding.GetBytes(key); var baseStringBytes = encoding.GetBytes(baseString); using (var hmacSha = new HMACSHA256(keyBytes)) { var hashBaseString = hmacSha.ComputeHash(baseStringBytes); signature = Convert.ToBase64String(hashBaseString); } return signature; }