2016-03-01 55 views
0

我使用this site的NodeJS - SuperAgent的-HTTP簽名 - 簽名不發送

var superagent = require('superagent'); 
var superagentHttpSignature = require('superagent-http-signature'); 

superagent 
    .get('http://project.dev/api/v3/project/tasks/get?task_id=1026') 
    .set('Accept', 'application/json') 
    .set('x-app-key', 'MY_ACCESS_KEY') 
    .set('x-app-trusted', 'key=None') 
    .use(superagentHttpSignature({ 
     headers: ['(request-target)', 'Accept', 'x-app-key', 'x-app-trusted'], 
     algorithm: 'hmac-sha256', 
     key: 'MY_ACCESS_KEY', 
     keyId: 'MY_SECRET_KEY' 
    })) 
    .end(function(err, res) { 
     // console.log(err); 
     console.log(res.body); 
    }); 

節點版本:v4.2.1

如果我檢查服務器上的簽名頭(運行PHP的方式,帶有自己的簽名驗證程序,使用相同的規範),簽名標題丟失。

我失蹤了嗎?或者是否有任何替代節點包具有相同的功能?

我的目的是爲了能夠使用PHP以外的其他語言調用API作爲概念證明,以便稍後將其用於AWS Lambda計劃任務。

回答

0

您的代碼有效,錯誤在您的服務器端。也許PHP和代碼之間的東西(Apache?nginx?)正在過濾頭文件。

GET /api/v3/project/tasks/get?task_id=1026 HTTP/1.1 
Host: project.dev 
Accept-Encoding: gzip, deflate 
User-Agent: node-superagent/1.8.0-beta.2 
Accept: application/json 
x-app-key: MY_ACCESS_KEY 
x-app-trusted: key=None 
Authorization: Signature keyId="MY_SECRET_KEY",algorithm="hmac-sha256",headers="(request-target) Accept x-app-key x-app-trusted",signature="9ietyIsW8nPH6BqwiePqsDefQpGUFERoV7wEaQ9UUGQ=" 
Connection: close 
+0

我明白了。我將檢查服務器配置。你如何查看頭文件?對不起,nodejs節點流暢。 – Lysender

+0

我只是把netcat作爲一個服務器來獲取來自客戶端的請求。 'nc -l ',然後用'http:// /api/v3/project/tasks/get?task_id = 1026'連接到它,但有很多方法可以做到這一點。 – bolav

+0

剛剛測試過它,並且確實存在Authorization標頭。頭文件可能在nginx(代理)或我的Docker容器中的Apache中被剝離。然而,'keyId =「SECRET_KEY」'部分似乎是錯誤的,它應該是訪問鍵。無論如何,這個軟件包似乎與我的API服務器不兼容。我可能會寫我自己的實現或找到另一個包。謝謝!標記爲答案。 – Lysender