2014-03-04 57 views
0
  1. 我有我的RESTapi服务器存储AWS公共密钥/密钥。我还存储客户端公钥/密钥(客户端是我创建的用户 - 它有权进行CORS请求)。如何签署从外部服务器执行的S3请求

  2. 我有我的,这将文件上载直接S3存储外部服务器。但我不想在其上存储AWS凭据 - 我希望它在上传之前以某种方式调用主服务器来签名请求,然后直接将文件上传到s3。

现在我使用aws-sdk外部服务器上是这样的:

var aws = require('aws-sdk'); 

aws.config.update({ 
    "accessKeyId": process.env.AMAZONS3_ACCESSKEY_ID, 
    "secretAccessKey": process.env.AMAZONS3_ACCESSKEY, 
    "region": process.env.AMAZONS3_REGION_CLOUD, 
}); 

var s3 = new aws.S3({ params: { Bucket: 'myCustomBucket' } }); 

s3.putObject(...); 

现在我需要改变,因此外部服务器将调用主服务器与一些S3 PARAMS和它会被背面签名密钥或类似的东西,它会用它来上传文件...

所以主服务器上的端点应该怎么样子(什么PARAMS中应该消耗以及如何生成号)? 然后我可以如何使用标志从外部服务器发出请求?

回答

0

这里http://docs.aws.amazon.com/aws-sdk-php/guide/latest/service-s3.html下部分看一看创建presigned网址

// Get a command object from the client and pass in any options 
// available in the GetObject command (e.g. ResponseContentDisposition) 
$command = $client->getCommand('GetObject', array(
    'Bucket' => $bucket, 
    'Key' => 'data.txt', 
    'ResponseContentDisposition' => 'attachment; filename="data.txt"' 
)); 

// Create a signed URL from the command object that will last for 
// 10 minutes from the current time 
$signedUrl = $command->createPresignedUrl('+10 minutes'); 

echo file_get_contents($signedUrl); 
// > Hello! 

创建命令(在你的情况下,认沽不是GET)一台服务器上,通过这个来,这将创建presigned主服务器网址。将其传回外部服务器执行。

相关问题