2016-04-07 11 views
0

SASトークンを使用してIoTハブに接続するときに問題があります。 Microsoftの例では、NodeJSが暗号を使用してSASトークンを作成するためのサンプルコードがあります。しかし、NodeJSでこのコードを使用すると、thisエラーが発生します。IoTハブSASトークンノードJS暗号化エラー

しかし、私はチュートリアルのすべてをやったので、何も見当たりません。 コード例は以下の通りです:

// Creating SAS token 
var crypto = require('crypto'); 

var generateSasToken = function (resourceUri, signingKey, policyName, expiresInMins) { 
    resourceUri = encodeURIComponent(resourceUri.toLowerCase()).toLowerCase(); 

    // Set expiration in seconds 
    var expires = (Date.now()/1000) + expiresInMins * 60; 
    expires = Math.ceil(expires); 
    var toSign = resourceUri + '\n' + expires; 

    // using crypto 
    var decodedPassword = new Buffer(signingKey, 'base64').toString('binary'); 
    const hmac = crypto.createHmac('sha256', decodedPassword); 
    hmac.update(toSign); 
    var base64signature = hmac.digest('base64'); 
    var base64UriEncoded = encodeURIComponent(base64signature); 

    // construct autorization string 
    var token = "SharedAccessSignature sr=" + resourceUri + "&sig=" 
    * base64UriEncoded + "&se=" + expires; 
    if (policyName) token += "&skn=" + policyName; 
    console.log("signature:" + token); 
    return token; 
}; 

私は誰かがこの謎母と私を助けることができることを願っています。..

答えて

0

あなたのスクリーンショットに示した誤差共有アクセス署名の一部が欠落していることを示し、または解析できません。

そこには、私はあなたのコードで見ることができるカップルの事は次のとおりです:トークンを作成するために、文字列を連結するとき

  1. あなたはHMACを生成する方法+

  2. する必要があります*がありますハッシュ:パスワードを含むbase64でエンコードされたバッファに 'toString(' binary ')を使用しないでください(ノードで問題にならないようにしてください)。

function hmacHash(password, stringToSign) { 
    var hmac = crypto.createHmac('sha256', new Buffer(password, 'base64')); 
    hmac.update(stringToSign); 
    return hmac.digest('base64'); 
} 

(参照:authorization.js

すでにNode.jsのSDKを使用しているように見えるエラーのスクリーンショットから、あなたはDevice SDKService SDK(いずれかのSharedAccessSignature.create(...)方法を使用して試してみましたあなたが達成しようとしているものに応じて)

が、それはあなたがで掲示コードを置き換えます:?

// compute expiry value 
var expires = (Date.now()/1000) + expiresInMins * 60; 
expires = Math.ceil(expires); 
// generate SAS token 
var sas = SharedAccessSignature.create(resourceUri, policyName, signingKey, expires); 
// from then you can create a client object: 
var client = Client.fromSharedAccessSignature(sas.toString()); 
+0

連結上の+トリック、ありがとうございました とても! –