Я использую Rackspace Cloud Files в качестве сервера хранилища файлов для своего приложения.Файлы, которые пользователи загружают, должны быть авторизованы из моего приложения, затем с контроллера оно будет перенаправлено на правильный URL-адрес CDN Rackspace Cloud Files.Я пытаюсь выполнить авторизацию, используя ACL Referrer Rackspace Cloud Files.
Итак, позвольте мне добавить очень простой фрагмент, чтобы уточнить, что я пытаюсь выполнить.
class FilesController < ApplicationController
def download
redirect_to(some_url_to_a_file_on_cloud_files_url)
end
end
URL-адреспользователь мог бы получить доступ к этому действию загрузки следующим образом:
http://a-subdomain.domain.com/projects/:project_id/files/:file_id/download
Итак, для гема CloudFiles я настроил регулярное выражение ACL Referrer, которое должно работать.
http\:\/\/.+\.domain\.com\/projects\/\d+\/files\/\d+\/download
Когда пользователь щелкает ссылку в веб-интерфейсе пользователя, он направляет их по указанному выше URL-адресу и, в зависимости от параметров, из действия загрузки перенаправляет пользователя на правильный URL-адрес файла Rackspace Cloud Files File.
Хорошо, то, что я получаю, является ошибкой, говоря, что я не авторизован (неправильный http реферер).У меня есть предчувствие, что, поскольку я делаю перенаправление с действия загрузки прямо в облачные файлы, оно не «считается» как HTTP Referrer и, вместо того, чтобы использовать этот URL в качестве реферера, я думаю, что оно может использовать этоURL:
http\:\/\/.+\.domain\.com\/projects\/\d+\/files
Поскольку это страница, на которой вы находитесь, когда хотите щелкнуть ссылку «загрузить», она указывает пользователю на действие загрузки в FilesController.
КогдаЯ установил HTTP Referrer для Rackspace ACL следующим образом:
http\:\/\/.+\.domain\.com\/projects\/\d+\/files
И затем нажмите на ссылку, я авторизован для загрузки.Тем не менее, это не достаточно безопасно, так как тогда любой может, например, просто включить firebug в html и вставить необработанную ссылку на файл и получить доступ.
Так что я думаю, у меня есть вопрос, есть ли у кого-нибудь какие-либо подсказки, какили почему то, что я пытаюсь достичь, не работает, и есть какие-либо предложения / идеи?Как я уже сказал, я думаю, что, возможно, когда пользователь щелкает ссылку, в качестве источника ссылки устанавливается местоположение, по которому щелкается файл, а не URL, куда пользователь перенаправляется на фактический файл в облачных файлах.
Возможно ли что-то подобное?
class FilesController < ApplicationController
def download
# Dynamically set a HTTP Referrer here before
# redirecting the user to the actual file on cloud files
# so the user is authorized to download the file?
redirect_to(some_url_to_a_file_on_cloud_files_url)
end
end
Любая помощь, предложения очень ценятся!
Спасибо!