是否有人知道是否可以配置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端使用机器密钥进行加密。
是否有人知道如何设置它?非常感谢任何指导。