防伪令牌 Cookie 未出现在请求中 Headers 仅在嵌入到 iframe 中时出现
Antiforgery Token Cookie Not Appearing in Request Headers Only in when Embeded in Iframe
我正在尝试嵌入一个简单的网络应用程序,它将 POST 用户输入 运行 asp.net Core 2.0 放入 iframe 中。我遇到的问题是,在嵌入时,正在生成的请求 header 缺少包含 .AspNetCore.Antiforgery.[token] 的 cookie header。它正在 iframe 之外按预期生成。
这会导致 400 错误,因为 post 无法验证令牌。
请求 Headers 在 iframe 外部生成:
Request Headers: NO IFRAME
请求 Headers 在 iframe 内部生成:
Request Headers: INSIDE IFRAME
有人遇到过防伪令牌库的这个问题吗?
谢谢!!
事实证明,cookie class 上的 SameSite 属性 需要将防伪选项设置为 None 才能正常工作:
services.AddAntiforgery(options =>
{
options.Cookie.SameSite = SameSiteMode.None;
});
Flyingmartini 的回答对我不起作用,我还需要设置这些属性:
services.AddAntiforgery(options =>
{
options.SuppressXFrameOptionsHeader = true;
options.Cookie.SameSite = SameSiteMode.None;
options.Cookie.SecurePolicy = CookieSecurePolicy.SameAsRequest;
});
我正在尝试嵌入一个简单的网络应用程序,它将 POST 用户输入 运行 asp.net Core 2.0 放入 iframe 中。我遇到的问题是,在嵌入时,正在生成的请求 header 缺少包含 .AspNetCore.Antiforgery.[token] 的 cookie header。它正在 iframe 之外按预期生成。
这会导致 400 错误,因为 post 无法验证令牌。
请求 Headers 在 iframe 外部生成: Request Headers: NO IFRAME
请求 Headers 在 iframe 内部生成: Request Headers: INSIDE IFRAME
有人遇到过防伪令牌库的这个问题吗?
谢谢!!
事实证明,cookie class 上的 SameSite 属性 需要将防伪选项设置为 None 才能正常工作:
services.AddAntiforgery(options =>
{
options.Cookie.SameSite = SameSiteMode.None;
});
Flyingmartini 的回答对我不起作用,我还需要设置这些属性:
services.AddAntiforgery(options =>
{
options.SuppressXFrameOptionsHeader = true;
options.Cookie.SameSite = SameSiteMode.None;
options.Cookie.SecurePolicy = CookieSecurePolicy.SameAsRequest;
});