2014-04-29 59 views
11

我在我的Ember/Angular/Backbone應用程序中從Cookie轉移到基於標記的身份驗證時遇到了一個障礙。如何使用基於令牌的身份驗證訪問受保護的資產內聯?

問題是無法在img標籤上設置請求標頭。

有些人建議在請求的末尾附加令牌參數,從而使用認證令牌丟棄服務器日誌。

什麼(如果有的話)是使用基於令牌的身份驗證訪問受保護的內聯資產的正確方法?

+0

只是好奇,但是UI的圖像部分,還是他們實際上需要保護的資產?我曾在一個項目中做過兩種工作,最後我們通過後端服務器爲受保護的圖像發出圖像請求以獲取身份驗證 - 我們決定不用這種方式保護用戶界面圖像。 – aet

+0

資產需要保護。這是一個項目管理應用程序,客戶可以上傳圖像/電影/文件/任何和定義它們的ACL。 UI圖像是公共資產,不受保護。 –

+1

爲什麼不通過你的web應用程序路由圖像請求?後端可能會發送正確的標題以返回正確的圖像 – Alp

回答

9

重要的警告:我不是一個安全專家(但我涉足)

在我使用Amazon S3和資產的基於令牌的安全性了過去。這些允許您爲資產訪問生成私人甚至臨時URL。您也可以在您自己的服務器上實現類似的機制,但請記住,您現在將自行託管和提供資源,以便記住諸如帶寬使用,緩存等內容。

This post似乎有一個漂亮使用AngularJS和亞馬遜保護圖像的詳細教程。

如果你不想去亞馬遜路線,你需要自己實施某種令牌/安全方案,並且你可以採取多種方法。這在很大程度上取決於你想要的安全級別。

  1. 您可以在沒有URL的情況下以編程方式加載圖像數據。應該可以使用CSS和base64 data URIs來完成此操作。您可以對數據進行AJAX請求並填充數據URI。雖然這是絕對安全的,但它也可能是低效的。

  2. 你可以用use cookies來控制訪問。由於這些將在獲取圖像時由瀏覽器發送。

  3. 您可以使用安全的標記化URL的自定義實現,如https://host/secure_images/{tokenized_access_url}.jpg。就像S3一樣。你甚至可以讓這個令牌在一段時間後過期。

根據您的需求,你可能會發現其中的一些技術傷害你採取緩存優勢的能力。這就是爲什麼使用S3/Cloudfront可能是安全性和效率方面的最佳選擇。

你還應該問的是,如果這些資產需要被保護以防止URL被泄露。對於許多情況,只需將資源網址保留爲私有(在某處使用隨機生成的值)並僅向具有訪問權限的用戶顯示它,這是一個充分的解決方案。

相關問題