我已經實現了一個認證模式,模仿亞馬遜在我的Django網絡服務上用S3做的事情。每個請求都使用祕密進行簽名。要簽名的字符串除其他外還包括正在訪問的資源的URL。如何檢測客戶端用於訪問Django Web服務的實際URL?
例如,如果客戶端發出http://myservices.org/users的GET請求,則客戶端必須構造string_to_sign
,其中包含http://myservices.org/users
。當服務器處理請求時,它也會構造一個string_to_sign
,並且可以根據它從WSGI包裝器請求對象獲知的信息包含相同的URL。
我的問題是,當客戶端決定包含端口號(例如http://myservices.org:80/users
)時,服務器代碼將構造一個不正確的string_to_sign
,因爲我不知道如何獲取客戶端使用的實際URL。 WSGI封裝器不讓我知道URL包含端口號。
有沒有辦法讓Django應用程序學習HTTP請求中的實際URL?我是否需要設置某種位於WSGI封裝器之前的請求處理程序,以便訪問原始HTTP請求並將URL自動抽出?