2017-08-10 79 views
0

我在用於檢查控制器中的用戶權限的聲明中遇到了很多問題。如何使用.net核心在cookie中存儲聲明的JWT

應用結構

我們的後端是.NET的核心,前端反應,現在我們只允許採伐利用中使用谷歌谷歌的API支持電子郵件。我們生成一個JWT並將其存儲在瀏覽器的localStorage中,然後根據每個請求發送它。此外,沒有角色:如果你登錄,那麼你是一個管理員。

做了應用程序「骨架」的開發人員現在都不見了,這是我第一次處理安全問題。

了新的要求

我們現在需要實現角色和權限,它似乎MS預計一個用於該索賠。我做了這些,並將這些聲明添加到jwt,然後在配置中添加了策略,並且它實際上工作。如果您有特定的聲明,則可以訪問特定的控制器或方法,否則服務器將返回403錯誤。

但是後來我用一個實際的管理員角色登錄,使用devtools複製localStorage值,然後用幾乎沒有權限的用戶註銷並重新登錄。當我粘貼本地存儲條目時(再次使用devtools),我立即得到了所有聲明,並能夠訪問管理員可以訪問的每個控制器和方法。

看來正確的路要走,那麼應該使用僅Http,安全cookie,或許與「SAMEORIGIN」設置爲true(不知道這將如何影響單點登錄),但我不明白如何辦那。我看過博客文章,甚至下載了一個應用程序(我無法運行,但我將代碼複製到了我的應用程序中),但我一直在失敗。另外我不明白,如果我需要爲檢查控制器策略時使用的cookie做任何事情。

任何人都可以幫我一下嗎?

回答

0

問題是,如果攻擊者能夠進入用戶的瀏覽器,那麼他/她可能會比竊取access_token更多的傷害。在Auth0.com上查詢this thread。基本上:

假設您可以從某人的瀏覽器中竊取智威湯遜。 取決於你如何能做到這一點可能有兩種情況:

  1. 你不是在一個情況引起的不僅僅是偷令牌的更多的傷害。
  2. 你不是,想象一下,如果不是存儲JWT,而是你的實際密碼被盜,那會更糟糕。

的主要區別在於,餅乾更容易受到XSRF而JWTs更容易受到XSS。

此外,一個更爲有用的報價,如果你會選擇餅乾在智威湯遜:

餅乾的優點是:

  • 更安全不受XSS假設你是願意使用的HttpOnly餅乾

的缺點是:

  • 您無法在JS代碼中訪問JWT。
  • 您需要保護CSRF的請求,因爲標頭方法不會受到此限制,但Cookie是脆弱的。
  • 您的API代碼需要處理來自Cookie(來自瀏覽器)或標題(其他服務器調用您的API需要使用標頭的 )的JWT。
  • 如果您的API與您的網站位於同一個域中,Cookie可以正常工作。如果API位於不同的域中,則不可用。

當談到第三點關於從一個cookie,而不是你需要修改中間件描述here HTTP頭驗證JWT。

就個人而言,如果您使用ReactJS,我會保留JWT模型,因爲它更適用於SPA應用程序suitable。正如你所描述的情況:「當我粘貼本地存儲條目(再次使用devtools)時,我立即得到所有聲明」基本上意味着攻擊者坐在計算機前面,在這種情況下竊取JWT令牌變爲一點關心。

請記住,您需要設置到JWT令牌的到期日期,然後您應該沒事。