2016-07-11 8 views
4

Ich versuche mit Lambda ein signiertes Cookie zu generieren und zurückzugeben, damit meine iOS-App mit dem Cookie über CloudFront auf eingeschränkte Dateien zugreifen kann.Verwendung von AWS.CloudFront.Signer in Lambda-Funktion

ich denke, das sollte möglich sein, die Signer-Klasse: http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CloudFront/Signer.html

Auf dieser Grundlage ich die folgende Lambda-Funktion geschrieben haben:

var AWS = require('aws-sdk'); 
var keyPairId = 'APK...'; 
var privateKey = 'MIIE...'; 
var signer = new AWS.CloudFront.Signer(keyPairId, privateKey); 

exports.handler = function(event, context) { 
    var options = {url: "https://xxxxxx.cloudfront.net", expires: 1357100000}; 

    signer.getSignedCookie(options, function(err, data) { 
     if (err) { 
      context.fail(err); 
     } else { 
      context.succeed('Success'); 
     } 
    }); 
}; 

Dies ist jedoch nicht funktioniert. Ich bekomme immer den Fehler 'Prozess beendet, bevor Anfrage abgeschlossen'. Ich habe viele Permutationen für das Format des Parameters 'options' ausprobiert, von denen keiner einen Unterschied macht.

Jede Hilfe wäre willkommen.

+0

Gibt es sonst nichts in den Protokollen? –

Antwort

5

Es stellt sich heraus, dass mein privates Schlüsselformat falsch war. Es muss gehören die ‚----- BEGIN RSA PRIVATE KEY -----‘ Wortlaut und auch die neuen Linienzeichen, wie diese (privater Schlüssel aus offensichtlichen Gründen verstümmelt):

var privateKey = '-----BEGIN RSA PRIVATE KEY-----' + '\n' + 
'MIIEogIBAAKCAQEAgaqMPqZ2QlhLx7pmguBMR32+dLPq7HrXN92z+QLbLgQklDpU' + '\n' + 
'D/LLayMk5tyoZXLjRElZiWgIbLa8ftCQBVT1feG9XbwJVvBKqBkZzHR7xB47LVud' + '\n' + 
't8zatnHHQngXkFV/YY+RAv9XN3E6GacXn02cGKbF14pQWFbjdJDcqUq1yf8/b9i7' + '\n' + 
'JorOYYarXYXXYPaRp1HxSDAZkjM5WC0GeOk7v4cCgYB5chK6CARv5Wx9yzVYurvQ' + '\n' + 
'KJxpidxV2AE4MgTkg8UeK7GPhizJIIKRPmvfM/rmiRC9NvrCHzTsVwk0mVWDhRuH' + '\n' + 
'iATROrmPVQA6CZYODAmjXXXXXXsREg2s4+6XKzH/Cylb1YTowkIkWNyZEAtuyaBK' + '\n' + 
'BBswVdO8VlOKQoouH71ktQKBgF1Sr4/btRI2wiVWWnEaORJO6+3Pekm4xyIbaOPo' + '\n' + 
'yaRSy3KOQETUUR9Wg6dEwCEXBkBfte1dk/DIzES7FppypeXqu7viRLmOC1gXEK+6' + '\n' + 
'k1hwClaKGhqafVVsHSsUzIUkBusoo4GKTXnrl/EPD5gpgt9TsPt/D1KqWW5sxfrl' + '\n' + 
'dm+fAoGAcr0QqHdGea5OeC0fQGFZkgSQZ3ojdX43KWXXr5Jl+4ZiJTbOYqgGE+DL' + '\n' + 
'QJX1I9fqruHhn02hXXX+eTOLOT4GDv2Lf6uHhQPHWgv4K3u/7Xb35Pumn/x2e8vb' + '\n' + 
'xrRsk3KxdYAq+I9mpjYKIZL2EswnIkOTFJR+3O179/vpsFpIACg=' + '\n' + 
'-----END RSA PRIVATE KEY-----'; 

Mit dieser Änderung Alles funktioniert gut.