2015-10-25 70 views
0

我一直在嘗試將調用Chef API的Scala庫放在一起,但我一直收到驗證API調用的問題。無法與廚師API正確認證

我有三重檢查和私鑰是正確的,所有其他頭。我使用的代碼是在這裏:

https://github.com/LiamHaworth/shef/blob/master/src/main/scala/au/id/haworth/shef/ChefUtils.scala

,我叫它像這樣

import au.id.haworth.shef.{RequestMethod, ChefUtils} 
import au.id.haworth.shef.ChefServer 

val key = io.Source.fromFile("user.pem").getLines.mkString("\n") 

val chefServer = ChefServer("chef.example.com", 443, "https", "myorg", "myuser", key) 

ChefUtils.sendRequestToServer(chefServer, RequestMethod.GET, "", "") 

但我一直在從服務器獲取

"{"error":["Invalid signature for user or client 'myuser'"]}"

這種反應我相信這個問題很簡單,並且正在盯着我,但是我看不到它,所以任何幫助都將不勝感激。

+0

值得[閱讀DOC(https://docs.chef.io/api_chef_server.html)那裏。 – Tensibai

回答

0

我已成功獲取API進行身份驗證。在調試模式下使用刀檢查它正在生產什麼標題,並添加一個額外的行到我的mixlib打印規範的頭我得到它的工作。

隨着由mixlib打印的規範頭文件,我通過我的簽名代碼運行了它們,發現我沒有得到與簽名相同的結果,所以我挖得更深一點,發現我以非常錯誤的方式簽署了頭文件。

我正在消化他們沒有簽署他們!在我的代碼中更換RSADigestSigner代替Signature並更改算法(SHA1withRSARSA)後,我終於得到了與mixlib相同的標頭!

TL; DR我嘲弄並使用了錯誤的類來做我想做的事。我所做的更改可以看到在這個承諾:

https://github.com/LiamHaworth/shef/commit/2db2aa5b89cae272eecd0901be91533b61d2a6c3