2015-12-03 69 views
2

我通過與智威湯遜認證的安全性在我的腦海一些結構問題的工作,我想弄清楚以下幾點:智威湯遜是否共享/存儲用於在客戶端和服務器上簽名的祕密?

  1. 如何JWT安全地傳遞服務器和客戶端之間的祕密?

  2. 看看下面的摘錄從https://stormpath.com/blog/where-to-store-your-jwts-cookies-vs-html5-web-storage/ ....................

CSRF可以通過使用能夠防止同步的令牌模式。這聽起來很複雜,但所有現代Web框架都支持這一點。

例如,AngularJS有一個解決方案來驗證該cookie只能被您的域訪問。直從AngularJS文檔:

「當執行XHR請求時,$ http服務讀取來自一個cookie令牌(默認XSRF-TOKEN),並且將它作爲一個HTTP報頭(X-XSRF-TOKEN)。由於只有在您的域上運行的JavaScript才能讀取cookie,因此您的服務器可以確保XHR來自運行在您的域上的JavaScript。 您可以通過包括xsrfToken JWT要求使這種CSRF保護無國籍:」

{ "iss": "http://galaxies.com", "exp": 1300819380, "scopes": ["explorer", "solar-harvester", "seller"], "sub": "[email protected]", "xsrfToken": "d9b9714c-7ac0-42e0-8696-2dae95dbc33e" }

  • 客戶如何創建和發送包含一個有效的請求xsrfToken聲稱,除非它在包含索賠之後可以首先簽署JWT? (這xsrfToken畢竟是什麼應該保持EvilBob僞造的請求吧?)可以在這裏http://spring.io/blog/2013/08/21/spring-security-3-2-0-rc1-highlights-csrf-protection/找到
  • 更多關於我目前的JWT XSRF過程的瞭解細節。

    回答

    1

    本文似乎將此稱爲「同步令牌模式」,但所述解決方案更適合於Double Submit Cookies方法而非Synchronizer Token Pattern

    雙提交cookie涉及在標頭或正文中發送cookie值,並將其與自動發送的瀏覽器cookie一起發送。如果您不支持CORS,那麼無論如何設置標頭中的標記都是安全的,就像任何自定義標頭值一樣(例如X-Requested-With)。這是因爲自定義標頭無法首先發送到跨域,因此驗證它是否已從客戶端傳輸來驗證其是否已從其他域中傳輸。作爲深度戰略的防禦,您可以將其設置爲隨機值,如this answer所解釋的。

    隨機值不需要來自服務器,也不需要簽名。它只需要由CSPRNG生成。如果生成客戶端,則應使用window.crypto。所有的服務器都檢查頭和cookie值是否匹配。

    第三方域名無法僞造請求,因爲即使瀏覽器自動從受害者的計算機發送cookie值,攻擊者也無法將該值包含在標頭或請求正文中。

    通過Synchronizer Token Pattern,CSRF令牌在服務器端生成並存儲在會話中。該值必須從每個表單提交中發送,並且經過驗證的服務器端與匹配存儲的令牌相符。

    +0

    哇,非常感謝你@SilverlightFox。這是非常全面和非常有用的,包括多種選擇。非常感謝反饋。 – PLanger

    1
    1. 我可以解釋Stormpath是如何做到的,還有其他一些方法。 Stormpath在JWT頭中包含一個'kid'(密鑰ID)字段,它是API密鑰ID /密鑰對的標識符。智威湯遜與祕密簽署,並且ID存儲在密鑰id字段中。當Stormpath驗證令牌時,它可以檢索祕密。這適用於所有服務器和服務,但是從未將傳遞給客戶端。使用客戶端將單獨的服務與祕密粘合在一起非常不安全。

    2. 客戶端不應該生成JWT,這需要在服務器上完成。服務器知道XSRF令牌並可以在JWT中對其進行簽名並將其放入cookie中。

    希望這些信息對您有所幫助!

    +0

    好的,有一些關鍵的東西我誤解了JWT過程的工作原理。 1)服務器是唯一知道祕密的人。同一個Secret用於簽署和驗證所有用戶的請求。 2)只有真實的客戶端才能訪問存儲auth-token和xsrf-token的cookie。攻擊者可以提交攻擊請求,但攻擊請求不會將xsrf-token作爲HTTP頭。從而使請求無效。 3)一旦請求到達服務器,服務器將檢查頭是否包含xsrf-token,如果是,則將其與JWT有效載荷中的xsrf-token比較。 – PLanger

    +0

    這聽起來沒錯嗎? – PLanger

    +0

    我第二個Davorins混亂[這裏](https://disqus.com/home/discussion/stormpath/where_to_store_your_jwts_cookies_vs_html5_web_storage_stormpath_user_management_api/oldest/) – Rhubarb

    相關問題