2

场景:我将一些文件放在 Google 网络存储上。

我希望只有付费用户才能下载这个文件。所以我的问题是,如何向付费用户隐藏此文件,以防止他们与其他未付费用户共享此 URL。

那么,有没有办法隐藏真实的文件位置?一次性或有时间限制的 URL 或任何其他?

其他 CDN 提供商可能会隐藏 URL - MIcrosoft Azure Storage 或 Amazon S3?

4

5 回答 5

2

您可以使用 Google Cloud Storage 中的签名 URL 来执行此操作: https ://developers.google.com/storage/docs/accesscontrol#Signed-URLs

于 2012-03-21T00:31:11.233 回答
2

为此,Amazon S3提供查询字符串身份验证(通常称为预签名 URL ),请参阅使用查询字符串身份验证

查询字符串身份验证对于让 HTTP 或浏览器访问通常需要身份验证的资源很有用。查询字符串中的签名保护请求。查询字符串身份验证请求需要到期日期。[...]

所有AWS 软件开发工具包 (SDK)都对此提供支持,下面是一个使用适用于 .NET的AWS 开发工具包中的GetPreSignedUrlRequest 类的示例,生成一个预签名 URL,该 URL 将在 42 分钟后过期:

using (var s3Client = AWSClientFactory.CreateAmazonS3Client("AccessKey", "SecretKey"))
{
    GetPreSignedUrlRequest request = new GetPreSignedUrlRequest()
        .WithBucketName("BucketName")
        .WithKey("Key")
        .WithProtocol(Protocol.HTTP)
        .WithExpires(DateTime.Now.AddMinutes(42));

    string url = s3Client.GetPreSignedURL(request);
}
于 2012-03-16T11:35:38.117 回答
2

Azure 存储具有共享访问签名的概念。它基本上是带有限制访问参数的 BLOB(文件)的 URL。我相信它与 Steffen Opel 的回答中提到的 Amazon S3 查询字符串身份验证几乎相同。

Microsoft 提供了一个用于处理共享访问签名的 .NET 库。它们还提供了您需要推出自己的库的文档。

于 2012-03-16T19:58:23.303 回答
1

这是真正隐藏 S3 URL 的替代方案。这种方法不是创建具有有限可行性的查询字符串认证 URL,而是接受用户的请求,授权用户,获取 S3 数据,最后将数据返回给请求者。

这种方法的优点是用户无法知道 S3 URL,也无法将 URL 传递给其他任何人,就像查询字符串在其有效期内验证 URL 的情况一样。这种方法的缺点是:1)在 S3“get”中间有一个额外的中介,2)可能会产生额外的带宽费用,具体取决于 S3 数据的物理位置。

public void streamContent( User requestor, String contentFilename, OutputStream outputStream ) throws Exception {

    // is the requestor entitled to this content?       
    Boolean isAuthorized = authorizeUser( requestor, filename );

    if( isAuthorized ) {
        AWSCredentials myCredentials = new BasicAWSCredentials( s3accessKey, s3secretKey );
        AmazonS3 s3  = new AmazonS3Client( myCredentials );
        S3Object object = s3.getObject( s3bucketName, contentFilename );
        FileCopyUtils.copy( object.getObjectContent(), outputStream );
    } 
}
于 2013-09-05T08:35:28.040 回答
1

一种方法是创建一个仅包含您的付费用户的 Google Group。然后,对于感兴趣的对象,授予组电子邮件地址的读取权限(通过对象的访问控制列表)。通过这种安排,只有您的付费会员才能下载这些投影对象。如果该组以外的人尝试访问该 URL,他们将收到拒绝访问错误。

设置完成后,您将能够通过编辑组成员身份来控制谁可以访问您的对象,而无需弄乱对象 ACL。

于 2012-03-16T07:35:53.597 回答