2014-03-25 31 views
3

我正在尋找一個良好的做法,授權使用jQuery的HTTP上傳到不同的服務器。好的做法,'授權'HTTP文件上傳到不同的服務器(類CDN)

我們目前有兩臺服務器的設置。一個用於主Web應用程序和一個用於文件存儲。用戶需要能夠在服務器#1上使用主應用程序的同時將其內容上載到第二臺服務器。

關鍵是,這些上傳必須經過「授權」,以防止用戶上傳任何內容到存儲服務器。所以,如果例如。用戶點擊「上傳新的配置文件圖片」主應用程序需要生成一個令牌並將其提交給存儲服務器,然後驗證它。

現在的問題:是否有更優雅的方式,如將用戶的會話注入到存儲服務器或任何其他最佳實踐?

+1

存儲和Web服務器都應該可以訪問相同的會話。您可以使用可從兩臺服務器訪問的數據庫作爲會話存儲來實現此目的。 – hek2mgl

+0

所以我會從應用程序服務器提交會話ID作爲元數據與上傳的文件。存儲服務器可以訪問會話並驗證會話標識。正確的方法? – Micronax

+0

如果會話cookie位於相同的域,這將工作。你不想傳遞PHP會話ID。 – Chris

回答

1

我相信使用令牌是最佳實踐。如果你可以設置一個通用的第三方服務器來處理密鑰驗證,這可能是一個很好的起點,我已經在下面包含了一個基本的設置。

簡單版本: 基本密鑰庫服務器(redis具有多個功能)。

讓應用程序服務器和存儲服務器都能夠對redis存儲進行身份驗證。

當用戶需要上傳時,讓應用程序在redis存儲區中創建一次性(GUID)密鑰。當您提交上載時,請在標題中包含此密鑰。

當接收到存儲請求時,存儲服務器應該將密鑰從標題中取出並驗證它是否退出到redis存儲中,然後清除該密鑰。

您可以在該請求中添加您想要的任何其他數據,例如用戶名,但密鑰將成爲您的權威決策者。

+0

而且redis也能夠爲記錄設置TTL。輝煌!幸運的是,我已經在這個項目中使用Redis,所以它很容易設置。我想,這是一個很好的解決方案!謝謝! – Micronax

相關問題