2017-08-10 74 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令牌的到期日期,然后您应该没事。