Как скрыть реальный URL с помощью Google Cloud Storage? - PullRequest
1 голос
/ 16 марта 2012

Сценарий: я помещаю некоторые файлы в веб-хранилище Google.

И я хочу, чтобы только платные пользователи могли скачивать этот файл.Поэтому мой вопрос заключается в том, как скрыть этот файл от платного пользователя, чтобы он не мог поделиться этим URL с другими неоплачиваемыми пользователями.

Итак, есть ли способ скрыть реальное местоположение файла?Одноразовые или ограниченные по времени URL-адреса или любые другие?

Может быть, скрытие URL возможно с другими поставщиками CDN - MIcrosoft Azure Storage или Amazon S3?

Ответы [ 5 ]

2 голосов
/ 16 марта 2012

Amazon S3 обеспечивает аутентификацию строки запроса (обычно называемую предварительно подписанными URL-адресами ) для этой цели, см. Использование аутентификации строки запроса :

Проверка подлинности строки запроса полезна для предоставления HTTP или браузеру доступа к ресурсам, которые обычно требуют проверки подлинности.Подпись в строке запроса защищает запрос.Запросы аутентификации строки запроса требуют даты истечения срока действия.[...]

Все Комплекты разработки программного обеспечения AWS (SDK) обеспечивают поддержку для этого, вот пример использования GetPreSignedUrlRequest Class из AWS SDK для .NET , создание предварительно подписанного 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);
}
1 голос
/ 21 марта 2012

Вы можете использовать подписанные URL-адреса в Google Cloud Storage, чтобы сделать это: https://developers.google.com/storage/docs/accesscontrol#Signed-URLs

1 голос
/ 16 марта 2012

Хранилище Azure имеет концепцию подписи общего доступа.Это в основном URL для BLOB (файла) с параметрами, которые ограничивают доступ.Я полагаю, что она почти идентична аутентификации строки запроса Amazon S3, упомянутой в ответе Штеффена Опеля.

Microsoft предоставляет библиотеку .NET для обработки подписей общего доступа.Они также предоставляют документацию , необходимую для создания вашей собственной библиотеки.

0 голосов
/ 05 сентября 2013

Вот альтернатива, которая действительно скрывает S3 URL.Вместо создания URL-адреса с проверкой подлинности в строке запроса, который имеет ограниченную жизнеспособность, этот подход принимает запрос пользователя, авторизует пользователя, извлекает данные S3 и, наконец, возвращает данные запрашивающей стороне.

Преимущество этого подхода состоит в том, что пользователь не имеет возможности узнать URL-адрес S3 и не может передать его кому-либо еще, как это имеет место в URL-адресе с проверкой подлинности в строке запроса в течение срока его действия.Недостатки этого подхода: 1) имеется дополнительный посредник в середине «получения» S3, и 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 );
    } 
}
0 голосов
/ 16 марта 2012

Один из способов - создать группу Google, содержащую только ваших платных пользователей.Затем для интересующего объекта предоставьте разрешение на чтение на электронный адрес группы (через список контроля доступа объекта).При такой договоренности только ваши платные участники смогут загружать эти спроецированные объекты.Если кто-то за пределами этой группы попытается получить доступ к URL-адресу, он получит сообщение об ошибке отказа в доступе.

После того, как вы это настроите, вы сможете контролировать доступ к вашим объектам, редактируя членство в группе,без необходимости связываться с объектными ACL.

...