我正在使用ASP.NET MVC 5 w / .NET 4.6和Identity 2.1。我正在将我的应用程序迁移到SPA(单页应用程序)。我一直在调查此事,因为我担心CSRF / XSRF攻击。我有几个问题..
我已经开始使用OAuth和JWT通过Katana实现令牌承载方法,遵循本教程:http://bitoftech.net/2015/02/16/implement-oauth-json-web-tokens-authentication-in-asp-net-web-api-and-identity-2/
实施后,我意识到我需要以安全的方式存储JWT。根据Stack Exchange网络和其他一些网站,最好的方法是将它存储在带有HTTP标志的Cookie中。这可以防止攻击者使用XSS机制并窃取令牌。不幸的是,这种方法容易受到CSRF的攻击,使我几乎达到了平方1。
相同来源建议的机制是使用Double Cookie实现。我将发送两者:CSRF令牌(随机字符串)和JWT。尽管如此,我真的很担心生成CSRF令牌(这是我的主要问题)。检索防伪令牌的最佳方法(在我的理解中)是服务器渲染它
因此,我在初始加载时通过@ Html.AntiForgeryToken获取令牌,并将其用于后续请求。这会产生以下问题:该令牌有效期为多久?或者,我将如何处理CSRF令牌到期? (这是我最初的主要关注点)
我不知道在发送数据后从服务器请求另一个CSRF令牌有多可行。我对通过AJAX调用检索令牌持怀疑态度......
到目前为止,我还没有找到任何一篇关于此事的文章。所以这就是我要问的原因。
修改 考虑一下,我想我可以做到以下几点: 而不是使用JWT作为身份验证机制。我可以用它作为防伪机制。
我会使用Identity作为身份验证,并将令牌传递给每个验证请求。
如果用户有效且令牌有效,请继续。
如果用户有效,并且令牌无效,则使请求无效。
如果用户有效,并且令牌有效但已过期,请退出该用户。
如果用户无效且令牌有效,则令牌和请求无效。