2013-10-24 75 views
3

我正在構建一個帶有API後端的Angular應用程序。在多條建議的組合下,我構建了帶有令牌認證風格的API。流程大致如下:Angular應用程序中的API令牌安全性

  1. POST登錄端點憑據
  2. 驗證憑證和授權,然後生成一個新的令牌
  3. 返回令牌客戶
  4. 客戶端通過HTTP基本訪問採用令牌API資源

這一切都很好。根據此令牌創建會話時出現問題。我不認爲我應該簡單地在客戶端中保存cookie中的令牌,但我確實需要在頁面刷新之間持續進行會話等。我的Angular應用程序是無狀態的,並且通過API調用完全填充。

我正在尋找建議掛在客戶端上的這個令牌。我覺得在cookie中保存令牌存在危險,因爲cookie可能被盜用,並且只是用來認證其他人,但也許這是不正確的。

在此先感謝您的幫助!

+0

這可能會幫助您http://stackoverflow.com/q/20870386/2015318 – StarsSky

回答

0

因爲它是一個Angular應用程序,所以我會假設所有經過身份驗證的方法只會服務於ajax請求(您可以告訴服務器只響應ajax),在這種情況下CORS將幫助您。

完全安全的唯一方法是HTTPS,但是這種方法可能比您想象的更安全。請仔細閱讀CORS瞭解更多信息,但本質上這個想法是,服務器只會響應來自同一個域所服務的html頁面的ajax請求。

飛行前選項請求經常被髮送來驗證這一點。瀏覽器在實際請求之前發送帶有Origin頭部(頁面的起源)的OPTIONS請求。如果源匹配接收它的服務器的域,則允許後續請求。否則,它違反同源政策,將被拒絕。

這可以防止某人嗅出令牌並從服務器未提供服務的頁面(如黑客本地計算機上運行的某個頁面)發送帶令牌的請求。

如果您正在進行信用卡交易或任何超級安全,您應該使用HTTPS。

http://en.wikipedia.org/wiki/Cross-origin_resource_sharing

+0

HTTPS從一開始就已計劃好。我很欣賞CORS上的信息;我會執行,然後去。謝謝! – Ben

1

我來識別用戶的唯一已知的方法是使用一些象徵性的在客戶端上。 HTTP是無狀態的,無法知道哪個請求來自哪個用戶(瀏覽器)。您無法通過他的IP地址識別用戶(許多用戶位於路由器後面並共享連接)。你可以嘗試瀏覽器指紋識別,它可以在一些瀏覽器上工作,但不是全部。

我會推薦使用cookie來將這個令牌存儲在客戶端。 他們發送到服務器上的每個請求,你可以做一些保護,以防止他們被盜。

要在中間攻擊中保護此Cookie不受人影響,您需要使用HTTPS到服務器的加密連接。

設置上的Cookie以下屬性:

中HTTPOnly:Cookie無法由JavaScript(XSS保護)進行訪問

安全:cookie將只發送通過HTTPS

路徑:餅乾只會在指定路徑上發送,例如/ login

我也會在cookie上定義一個到期日期,所以這個cookie在2天之內是無效的。

但你說得對。如果此令牌被盜,其他人可以以此用戶身份登錄。

相關問題