具有ASp.net核心的SPA防伪令牌

时间:2018-07-10 18:56:17

标签: angular asp.net-core single-page-application antiforgerytoken

我已通过以下方式实现Anti forgery token with angular SPA

在网络api中间件中进行了此操作,以便在客户端浏览器上设置cookie, 这将为每个api调用设置cookie。

var tokens = antiforgery.GetAndStoreTokens(context);
context.Response.Cookies.Append("XSRF-TOKEN", tokens.RequestToken,
    new CookieOptions {HttpOnly = false, Secure = context.Request.IsHttps}
);

services.AddAntiforgery(options => options.HeaderName = "X-XSRF-TOKEN");

在spa中,我目前正在将Cookie值手动添加到请求拦截器中的标头中,因为两者都位于不同的域中。

if (Cookies.get('XSRF-TOKEN')) {
    config.headers['X-XSRF-TOKEN'] = Cookies.get('XSRF-TOKEN');
}

这似乎很好,没有任何问题。

但是,我试图理解整个概念。因此,我尝试了以下方法。

  1. 由于API会在每次调用时都设置cookie,因此会显示登录信息 屏幕上,该Cookie存在于浏览器中,因此我手动抓取了 Cookie值并将其保存在记事本中。
  2. 在请求拦截器中硬编码cookie值,而不是 从Cookie获取它。
  3. 刷新整个网页。 api使用不同的设置新的cookie     值。
  4. 现在发了一个帖子,标题和cookie中的值不同,我 可以在浏览器的请求标头中看到,但是api处理了 作为有效的防伪令牌。

至少,在我进行此测试之前,我假设标头值和cookie值应该相同,并且只有这样,validateantiforgerytoken属性会将其视为正确的发布请求。

如果这个假设是错误的,

  1. 这在阻止什么?
  2. 为什么我必须首先执行此实现。?
  3. 如果有人只是访问我们的登录页面并通过在标头中添加此cookie值来获取cookie值并从邮递员或其他任何地方拨打电话怎么办?

完全迷失在不同的想法中!希望有人已经遇到了这些想法或问题,并提供了一些帮助。

谢谢

0 个答案:

没有答案