sau*_*ari 6 c# jquery jwt .net-core
我在.net core 1.0中有一个Web API,它在登录时向客户端发出JWT令牌(access_token).现在,令牌有一个短的到期时间(10分钟),客户端每隔8分钟请求一个新的令牌,以保证会话的连续性.此令牌存储在客户端浏览器的cookie中.现在,如果客户端仅在浏览器的一个选项卡中工作,则此工作正常.但是,如果客户端打开两个或多个选项卡,则每8分钟向API发出一个新令牌请求.这导致来自同一用户的多个请求同时发生,并且我的应用程序为每个请求发出令牌,但只有一个令牌存储在客户端cookie中.但它导致多个令牌,其中只有一个令牌在其整个生命周期中使用.
我已经尝试将userId和token存储在DB中并在API请求期间对它们进行交叉检查,但是,多个选项卡中的同一用户同时发出请求并且逻辑在这里失败.
我该如何解决这种情况?我希望我的API在多个选项卡中为每个用户只发出一个令牌.任何帮助表示赞赏.
这很棘手。如果您尝试将令牌存储在数据库中,并且在旧令牌过期之前不发出新令牌,则会产生大量问题。想想当用户使用多个设备时的情况。这个逻辑行不通。还有很多案例。
在我看来,将 JWT 存储在服务器中是非常多余且违反直觉的。JWT 的主要好处之一是您不必每次请求受保护资源时都进行数据库调用。JWT 本身拥有用于授权用户的所有信息。
我相信,您正在寻找的解决方案是节流或速率限制。您可以将令牌发行端点限制为 1 个请求/秒/ip(进行实验并找到效果良好的速率)。这个想法是阻止来自同一 IP 的新令牌发行的并发请求,并仅处理其中一个。您可以通过IIS或通过Attributes来实现此目的。尝试一下,看看什么最适合您。