为什么AspNet Core 2.2服务器端创建的cookie在Facebook WebView中丢失?

问题描述 投票:0回答:1

我们在使用AspNet Core 2.2时遇到了一个问题 aspnet core 2.2Facebook WebView (https:/developers.facebook.comdocsmessenger-platformwebview。).

这个问题只发生在使用Messenger.com或facebook.com的聊天功能的桌面浏览器上。我们开发了一个聊天机器人,对话中有一些按钮,当用户点击该按钮时,一个WebView显示我们的网页。当用户点击那个按钮时,一个WebView显示了我们的网页。这个webapplication是一个aspnet core mvc webapp(在Azure App Service中的hosten),在服务器端的一个控制器动作创建了一个cookie并将其写入Response中。

var cookieOptions = new CookieOptions()
{
IsEssential = true,
Expires = DateTime.UtcNow.AddYears(1),
};
Response.Cookies.Append("COOKIE_NAME", "cookievalue", cookieOptions);

当这个页面从Facebook WebView(来自FB聊天机器人)加载时,上面(在服务器端)创建的cookie不见了。

在aspnet核心网页项目中 启动.cs cookie中间件是这样配置的。

public void ConfigureServices(IServiceCollection services)
{
...
services.Configure<CookiePolicyOptions>(options =>
{
options.CheckConsentNeeded = context => false;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
...
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
...
app.UseCookiePolicy();
...
}

我试过了

  • 如果从客户端javascript中插入相同的cookie,cookie在Facebook webview中是可用的。

document.cookie = "COOKIE_NAME=cookievalue";

  • 使用asp.net fwk 4.7.2和Facebook webview也能正常工作。

  • 在移动应用程序(Messenger)中,它的工作原理与我预期的一样,cookie是可用的。

我认为问题的源头可能是在WebView中,因为从普通浏览器加载时,页面可以完美运行--而不是从WebView(Chrome、IE、Edge、FF、Safari等)加载,cookie(服务器端和客户端创建)都可以使用。

使用aspnet core 2.2和Facebook WebView的方案会有什么问题?

谢谢帮助!

facebook cookies webview asp.net-core-mvc asp.net-core-2.2
1个回答
0
投票

最后我找到了问题所在。chrome的cookie策略设置改变了。https:/www.google.comchromeprivacy这就是为什么我遇到了上面的问题。

解决办法: 我必须将这些cookie的samesite设置改为'SameSiteMode.None'。

var cookieOptions = new CookieOptions()
{
    Secure = true,
    SameSite = SameSiteMode.None,
    IsEssential = true,
    Expires = DateTime.UtcNow.AddYears(1),
};
© www.soinside.com 2019 - 2024. All rights reserved.