在Mvc4 / WebAPI2中验证ASP.NET Core Antiforgerytoken

时间:2017-09-25 05:47:13

标签: c# asp.net .net asp.net-core asp.net-web-api2

是否有人知道是否可以配置Mvc4 / WebApi2应用程序来验证/解密ASP.NET Core生成的Anti Forgery Tokens?

我们希望能够从ASP.NET Core应用程序使用在同一域(子域)上运行的ASP.NET Core生成的AntiForgeryToken向WebApi2应用程序发出经过验证的请求。

我相信(可能是错的,所以请纠正我),这在正常的WebApi下是可能的 - > WebApi或ASP.NET Core - > ASP.NET Core方案提供了在同一域下运行的两个应用程序(因此可以访问cookie)。我似乎无法找到有关如何执行此ASP.NET Core的说明 - >的WebAPI。

我们的ASP.NET核心应用程序通过以下方式设置了数据保护服务:

services.AddDataProtection().PersistKeysToFileSystem("SomeDirectory");

ASP.NET Core端具有可用的AntiforgeryToken实现: services.AddAntiforgery(options => options.HeaderName = "X-XSRF-TOKEN");

  app.Use(next => context =>
     {
        var tokens = antiforgery.GetAndStoreTokens(context);

        context.Response.Cookies.Append("XSRF-TOKEN", tokens.RequestToken,
                            new CookieOptions {HttpOnly = false});

        return next(context);
     });

在Mvc4 / WebApi2方面,我们设置了DataProtectorShim,以便它能够加密/解密双方都可以操作的OWIN cookie。

我们尝试手动验证防伪令牌/ cookie,但不出所料,它也无法解密(这是在黑暗中刺伤):

AntiForgery.Validate(HttpContext.Current.Request.Cookies["XSRF-TOKEN"].Value, HttpContext.Current.Request.Headers["X-XSRF-TOKEN"]);

据我所知,看起来System.Web Antiforgery类似乎不允许注入点,我们可以推入正确配置的数据保护器/垫片并始终使用MachineKey序列化器做这个解密。我很清楚Microsoft.AspNetCore.Antiforgery库,但我不确定这是否可以提供帮助。

我们尝试失败的结果是:

The anti-forgery token could not be decrypted. If this application is hosted by a Web Farm or cluster, ensure that all machines are running the same version of ASP.NET Web Pages and that the <machineKey> configuration specifies explicit encryption and validation keys. AutoGenerate cannot be used in a cluster.

这是有道理的,因为我们不在ASP.NET Core端使用机器密钥进行加密。

是否有人知道如何设置它?非常感谢任何指导。

0 个答案:

没有答案