【发布时间】:2016-10-17 10:01:09
【问题描述】:
每当我更新作为 Azure Web 应用程序运行的 ASP.NET Core RC2 网站时,它都会注销所有用户。它似乎与将登台部署槽交换到生产环境有关(我使用从 VS 到登台的 Web 部署,并将其设置为自动交换到生产环境)。如果我直接更新生产槽就可以了,但我不想那样做。我不知道如何配置它,不胜感激!
这是我现在的配置方式,我的网站只允许直接登录(没有 Facebook 登录等):
在启动中的 ConfigureServices 中
// found some post that said this would help... doesn't seem to work...
services.AddDataProtection()
.SetApplicationName("myweb");
services.AddIdentity<MyUser, MyRole>(options =>
{
options.Cookies.ApplicationCookie.CookieDomain = settings.CookieDomain; // cookie domain lets us share cookies across subdomains
options.Cookies.ApplicationCookie.LoginPath = new PathString("/account/login");
options.Cookies.ApplicationCookie.ReturnUrlParameter = "ret";
options.Cookies.ApplicationCookie.CookieSecure = CookieSecureOption.Never; // TODO: revisit site-wide https
// allow login cookies to last for 30 days from last use
options.Cookies.ApplicationCookie.ExpireTimeSpan = TimeSpan.FromDays(60);
options.Cookies.ApplicationCookie.SlidingExpiration = true;
// I think this needs to at least be longer than cookie expiration to prevent security stamp from becoming invalid before the cookie?
options.SecurityStampValidationInterval = TimeSpan.FromDays(90);
})
.AddUserStore<MyUserStore>() // custom stores to hook up our old databases to new identity system
.AddRoleStore<MyRoleStore>()
.AddDefaultTokenProviders();
并在启动时配置
app.UseIdentity();
【问题讨论】:
-
您的暂存槽和生产槽使用相同的数据库吗?登录会话存储在数据库中,因此如果您将 2 个数据库用于 2 个插槽,并且在交换时不保留这些数据库设置,那么这些登录会话也会被交换。
-
两个插槽都使用同一个数据库,但我认为这与这种情况无关......我们的网站不使用任何会话信息或将任何会话信息保存到数据库中。发生的事情可能是登录cookie在交换时变得无效......我的猜测是某些东西导致cookie在不同的插槽上以不同的方式加密......
-
更详细一点:当我交换部署槽时,登录 cookie 仍然存在于浏览器中......网站只是认为它们无效并忽略它们。
标签: c# azure asp.net-core asp.net-identity azure-web-app-service