Я реализовал схему аутентификации, которая имитирует то, что Amazon делает с S3 в моем веб-сервисе Django. Каждый запрос подписывается с использованием секрета. Подписываемая строка включает, среди прочего, URL-адрес ресурса, к которому осуществляется доступ.
Например, если клиент отправляет запрос GET для http://myservices.org/users, клиент должен создать string_to_sign
, который содержит http://myservices.org/users
. Когда сервер обрабатывает запрос, он также создает string_to_sign
и может включать тот же URL-адрес на основе информации, которую он получает из объекта запроса-оболочки WSGI.
Моя проблема заключается в том, что когда клиент решает указать номер порта (например, http://myservices.org:80/users
), тогда код сервера создает неверный string_to_sign
, потому что я не знаю, как получить фактический URL-адрес, который использовался клиентом. Оболочка WSGI не сообщает мне, что URL-адрес включает номер порта.
Есть ли способ для приложения Django узнать фактический URL-адрес, который был частью HTTP-запроса? Нужно ли мне настраивать какой-то обработчик запросов, который находится перед оболочкой WSGI, чтобы получить доступ к необработанному HTTP-запросу и самостоятельно извлечь URL-адрес?