2014-10-05 63 views
0

我有一個angularJS申請,其認證系統是由具有access_token,並寫在圍棋如何使用的access_token

後端服務器進行通信,以驗證在angularJS的應用請求圖像因此對用戶進行認證,我有將access_token添加到每個請求?access_token=SomeTokenHere或通過標頭Access-Token: SomeTokenHere

它的效果很好。

問題是我的後端提供受保護的圖像,出於某些安全原因,我無法將訪問令牌放在圖像src中(如果用戶將鏈接複製/粘貼到其他人,access_token也會被提供.. )

我想要做的是注入一個包含我的訪問令牌的頭文件,但由於請求是由瀏覽器創建的,所以這是不可能的。

這可能可能是一個cookie,但我會避免使用cookie,特別是因爲angularApp和後端不在同一個子域。

另一個想法是創建一個指令來獲取原始數據並將數據設置爲圖像。首先,我不知道這是否可行,並且對於網頁中的數百個圖像是否是一個好主意?

如果您有任何想法,我很樂意聽到您的消息!

謝謝

回答

1

這是一個典型的問題,幸運的是它已經解決了 - 例如在Amazon S3上。

解決方案的想法很簡單:不是直接使用密鑰,而是使用該密鑰生成帶有訪問策略的簽名。

有好的算法特別設計,以產生用於此目的的簽名 - HMAC

你可以有你的服務器上的一個密鑰,並用它來簽署每張圖片的URL,然後將它發送到客戶端,你也可以添加一些額外的策略,如URL過期時間...

+0

確實HMAC簽名可以解決這個問題,但我想確保即使用戶將鏈接複製/粘貼到其他人也無法獲取圖像。第二個問題是,同時生成數百個簽名不是免費的,會減慢請求處理速度。 – Arkan 2014-10-05 17:20:02

+0

關於鏈接複製/粘貼 - 可能的部分解決方案之一是檢查引用請求頭,並拒絕來自其他域的所有請求(這是防止圖像盜鏈的典型方法)。關於簽名生成時間 - 它不是免費的,但哈希本身非常快(每幾毫秒接近數千個哈希),因此與請求期間的其他計算相比,它可能不太明顯。 (如果你想在你自己的硬件上測試openssl哈希執行性能 - 你可以使用'openssl speed sha1'命令)。 – 2014-10-05 22:40:30

+0

有趣。我會做一些測試。同時,我會讓問題開放,但如果沒有其他人提供,我會在晚些時候接受:-) – Arkan 2014-10-06 08:25:46

相關問題