目標是能夠從我的Java應用程序中使用OAuth標題而不是NLAuth標題調用RESTlets。爲了實現它,我採取了以下措施:通過OAuth訪問NetSuite RESTlet
我創建NetSuite的開發者社區的帳戶,並獲得擁有管理員權限(域system.na1.netsuite.com)測試環境。
我打開設置 - >公司 - >啓用功能。然後打開「SuiteCloud」選項卡並在此處檢查「Client SuiteScript」,「Server SuiteScript」和「基於令牌的身份驗證」。
我打開了其中一個角色(這裏稱爲「08:檢查」)的編輯頁面。在「權限」選項卡上,我打開「設置」選項卡,併爲該角色添加了以下權限:「訪問令牌管理」,「使用訪問令牌登錄」和「用戶訪問令牌」。
我編輯了我的帳戶以擁有該角色:在編輯用戶和「角色」選項卡時打開「Access」選項卡我添加了該角色(「08:Inspection」)。
我打開安裝程序 - >集成 - >管理集成 - >新建並創建新的應用程序(「TestIntegr」)。最後一頁有兩個字符串:消費者密鑰和消費者密碼。我將它們保存在單獨的文件中。
我打開了設置 - >用戶/角色 - >訪問令牌 - >新建併爲我的應用程序+用戶+角色創建了新的令牌。最後一頁有兩個字符串:Token ID和Token Secret。我將它們保存在單獨的文件中。
我用我的測試程序來生成授權頭字符串,然後在rest-client(我用「Insomnia」)中使用這個字符串來到達我的dummy-restlet。有「INVALID_LOGIN_ATTEMPT」 - 錯誤。
在NetSuite audit-logs中,我可以代表我的用戶看到失敗,但沒有角色。
更多關於第7步的技術信息,下面的例子。
我用來達到我僞的Restlet是https://rest.na1.netsuite.com/app/site/hosting/restlet.nl?script=546&deploy=1
於是我產生了 「簽名字符串」 的URL(從第5步 「CONSUMER_KEY」,並從第6步 「令牌」):
GET&https%3A%2F%2Frest.na1.netsuite.com%2Fapp%2Fsite%2Fhosting%2Frestlet.nl&deploy%3D1%26oauth_consumer_key%3D17840f699409f5031c22a6e4af15961e9627c168cd0ae71f9c14f71b4097a0b6%26oauth_nonce%3D1444927941574%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1444927941%26oauth_token%3Df3c29a8b2c7988e00947d8c5836ef0ff1883556d96b8beac5bbbdda001ba0292%26realm%3DTSTDRV1403065%26script%3D546
然後我使用這個字符串和「consumer_secret & token_secret」生成「簽名」。頭部則有如下的樣子:
OAuth oauth_signature="7doRJOJyV36Av4e4BBUgoOPn7Vk%3D", oauth_nonce="1444927941574", oauth_signature_method="HMAC-SHA1", oauth_consumer_key="17840f699409f5031c22a6e4af15961e9627c168cd0ae71f9c14f71b4097a0b6", oauth_token="f3c29a8b2c7988e00947d8c5836ef0ff1883556d96b8beac5bbbdda001ba0292", oauth_timestamp="1444927941", realm="TSTDRV1403065"
然後我用我的休息,這個客戶端頭和拿到「INVALID_LOGIN_ATTEMPT」誤差(同時NLAuth頭與此休息的客戶端完美的作品,這個用戶和這個假-restlet)。
我使用這個在線工具檢查了我的簽名算法:http://nouncer.com/oauth/authentication.html它使用相同的標記/時間戳/隨機數/等顯示相同的結果。我想我在設置NetSuite環境(用戶/角色/其他)時漏掉了一些東西。另一方面,NetSuite幫助中心說:「當OAuth標頭中的隨機數,消費者密鑰,令牌或簽名無效時,將返回INVALID_LOGIN_ATTEMPT錯誤。」
請告訴我什麼是錯的。
謝謝你,prasun! Scribe的例子就像一個魅力。感覺像你對我的Java代碼是正確的。 :( – Logrus