通过JWT验证登录用户

时间:2019-02-25 02:17:49

标签: angular .net-core jwt

我将JWT身份验证与ASP.NET Core Web API一起使用。我遵循的过程。

  1. 在服务器端生成令牌并将其发送给客户端。
  2. 客户端随每个请求发送回标头上的令牌。\
  3. 服务器验证令牌并使用请求的信息进行响应。

我将令牌存储在客户端的本地存储中。我的问题是,

  1. 从两个不同的浏览器中以两个独立的用户身份登录(与通常的登录方式一样,使用用户名和密码登录)。
  2. 交换存储在两个用户本地存储中的令牌。

即使请求来自不同的用户,服务器仍然会验证令牌是否有效。

简单来说,任何人都可以通过使用有效令牌修改本地存储来入侵系统。

如何解决此安全漏洞?

4 个答案:

答案 0 :(得分:2)

常见的预防方法之一是将IP(作为登录源)作为签名JWT的一部分。由于这种安全问题,通常还使用安全机制来存储JWT。您可以根据客户和所使用的框架,研究存储JWT的最佳方法。

答案 1 :(得分:2)

您是对的,但这就是JWT的工作方式。

可能的解决方案: 使用Http安全cookie并从cookie中读取JWT,而不是使用和存储来自localsotage的令牌

如果有任何疑问,请给我

答案 2 :(得分:0)

JWT只是安全系统的一层。它们的存在是为了安全地标识经过身份验证的用户,并可能以可能可能但也可以很容易检测到的方式包括有关该用户的其他授权数据(角色,声明等)。

所以,对的,构建安全系统需要采取其他措施,例如:

  1. 仅通过安全通道发送令牌以防止MITM攻击。
  2. 赋予令牌较短的生存期,以使可能的攻击和利用窗口变窄。
  3. 确保在用户闲置x分钟后,用户已注销(并使令牌无效)。

答案 3 :(得分:-1)

您是对的。如果有人拥有令牌,则他们可以毫无问题地请求后端。这意味着他们可以用被盗的令牌做太多事情。这就是令牌通常具有到期和刷新令牌的原因。

我认为您应该为令牌设置较短的到期时间,并使用刷新令牌的机制