如何防止Asp.NET PWA防伪令牌被缓存?

时间:2019-01-31 09:42:29

标签: asp.net-mvc service-worker progressive-web-apps antiforgerytoken sw-toolbox

我有一个使用 sw-toolbox 来管理资源缓存的渐进式Web应用程序。

登录页面(/ user / login?returnurl = xxxx)需要一个防伪令牌,因此我这样配置了sw-toolbox路由器,以确保不返回页面内容的缓存版本:

toolbox.router.any("/user/*", toolbox.networkOnlyCustom);

其中networkOnlyCustom方法使用带有警告的内置networkOnly方法,如果用户处于脱机状态,则返回一个缓存的“对不起,您处于脱机状态”页面(见下文):

toolbox.networkOnlyCustom = function (req, vals, opts) {
    return toolbox.networkOnly(req, vals, opts)
        .catch(function (error) {
            if (req.method === "GET" && req.headers.get("accept").includes("text/html"))
                return toolbox.cacheOnly(new Request("/home/offline"), vals, opts);
            throw error;
        });
};

但是,我看到的是出现了很多“防伪Cookie令牌和表单字段令牌不匹配”错误。并非一直如此!实际上,如果用户看到该错误,然后在浏览器中单击“上一步”并再次提交表单,则他们登录就可以了。

我认为这样做的原因是浏览器(在我的情况下是Chrome 71)正在缓存登录页面。因此,我添加了以下HTTP响应标头,希望浏览器可以遵循:

cache-control: no-cache, no-store, no-store, must-revalidate
expires: -1
pragma: no-cache

但是,这还没有解决我的问题。任何想法将不胜感激!

0 个答案:

没有答案