可以使用Asp.Net Core Api将JWT存储在Cookie中吗?

时间:2019-06-17 16:22:39

标签: asp.net-core-2.2 asp.net-core-identity

有没有人幸运地将JWT令牌存储在cookie中,并且可以与Asp.Net Core的ValidateAntiforgeryToken一起使用?我有一个Angular应用程序和一个单独的Asp.Net Core 2.2 Api应用程序。我将JWT令牌嵌入到cookie中。

请注意,我没有使用cookie身份验证,也没有使用任何MVC部件,而是将JWT令牌放入cookie中。尽管Microsoft的文档以及AuthO和Okta的博客文章都提到将JWT存储在localStorage中,但我已经听到很多关于这是个坏主意,并且将JWT存储在cookie中更加安全。但是现在我们必须结合反伪造来对抗CSRF攻击。

我几乎可以正常工作了。我有一个接受请求并从cookie读取JWT的中间件,然后从cookie内容创建Bearer令牌标头。效果很好。

如果JWT过期,我将不再从验证防伪令牌的端点收到401错误。我收到了400错误的提示。这意味着防伪令牌丢失或无效。 Fiddler显示请求中存在Antiforgery cookie,而Antiforgery cookie的内容正是我所期望的。

为什么防伪Cookie由于JWT不验证授权而无法验证?如果收到401,则可以发送请求以检查刷新令牌,但是此时,Antiforgery令牌无效,并且任何受保护的端点都不会响应。即使我的JWT过期了,我也应该能够发布到我的Refresh令牌终结点,但是仍然可以通过防伪检查来保护它。

在这种情况下,还有另一种方法会更可取吗?例如使用基本身份验证或HMAC(显然总是在https下运行)?我是否应该覆盖授权部分并自己控制授权,以更好地控制发送给防伪验证的内容? localStorage是可行的,并且不像安全审核和其他开发人员的麻烦那样“邪恶”吗?我应该在Node中重写Api并自己控制授权和防伪吗?还是对于SPA,最好仅将令牌保留在内存中(或Ngrx存储中)?我非常感谢您的见解。

0 个答案:

没有答案