Лакируйте S3-подобный подписанный ограниченный по времени запрос перед доставкой объектов в VCL
Этот вопрос может показаться немного странным, но возможно ли с помощью решения для плохого человека в VCL выполнить синтаксический анализ подписанного запроса (с общим секретным ключом, также известного как решение HMAC для плохого человека), созданного реферером (основным) сайт, и обслуживать контент с лаком только в том случае, если подпись верна, а отметка времени (подписи) еще не истекла?
Таким образом, аналогично тому, как работает Amazon S3, вы можете легко создать временный URL-адрес со знаком для вашего S3-объекта, срок действия которого истекает через определенное количество секунд.
Примечание: я говорю не об истечении срока действия объекта кэша, а об истечении срока действия URL для клиента.
Это удобно, когда вы хотите выдавать временные URL-адреса только своим пользователям, чтобы предотвратить долгосрочную горячую ссылку без проверки заголовка реферера.
Итак - плохое решение временных URL-адресов в VCL (предпочтительно в vcl_recv), заставляющее устаревать внутренний объект). Это возможно без создания VMOD?
Редактировать:
Я нашел другой способ авторизации контента с помощью Varnish:
http://monolight.cc/2011/04/content-authorization-with-varnish/
Но это все еще не то, чего я хочу достичь.
С наилучшими пожеланиями!
2 ответа
Да, это возможно.
По сути, вам необходимо проверить подпись (дайджест vmod), выбрать метку времени из любого заголовка, в котором она находится (regsub), и сравнить ее с текущим временем.
использование std.integer()
чтобы поставить метку времени:
https://www.varnish-cache.org/docs/trunk/reference/vmod_std.html#integer
использовать встроенный now
переменная в VCL, чтобы найти текущую метку времени. Вы можете захотеть сделать (now + 0s)
чтобы заставить Varnish дать вам метку времени Unix.
https://www.varnish-cache.org/docs/trunk/reference/vcl.html#variables
Дайджест vmod находится на github:
https://github.com/varnish/libvmod-digest
Для этого уже есть VMOD, если это поможет?