因此,我进行了从aspnetcore1.1到aspnetcore2.0的迁移,并尝试使用中的新身份验证设置Startup.cs
。
我所有的网站都共享相同的域“ .example.com”。用户使用他们的Google帐户登录,然后获得一个应用程序cookie,我要在“ .example.com”的所有子域中保留该cookie。
现在,尽管如此,当用户登录时,成功创建了一个cookie,但是该cookie却从域中的所有其他站点注销。有人可以刺这吗?
public void ConfigureServices (IServiceCollection services)
{
// ...-snip-...
services.ConfigureApplicationCookie(options =>
{
options.Cookie.Name = ".AuthCookie";
options.Cookie.Expiration = TimeSpan.FromDays(7);
options.LoginPath = "/Account/Login";
options.Cookie.Domain = ".example.com";
});
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddGoogle(options => { /* ...-snip...- */ });
// ...-snip-...
}
public void Configure (IApplicationBuilder app)
{
// ...-snip-...
app.UseAuthentication();
// ...-snip-...
}
我所有的应用程序在Startup.cs
文件中共享相同的代码。它与使用有关CookieAuthenticationDefaults
吗?还是我想念我的东西ConfigureApplicationCookie
?
得到它了!看来我需要创建一个数据保护提供程序以在应用程序之间共享身份验证cookie。以下是工作代码更改:
services.ConfigureApplicationCookie(options =>
{
var protectionProvider = DataProtectionProvider.Create(new DirectoryInfo(@"c:\shared-auth-ticket-keys\"));
options.Cookie.Name = ".AuthCookie";
options.Cookie.Expiration = TimeSpan.FromDays(7);
options.LoginPath = "/Account/Login";
options.Cookie.Domain = ".example.com";
options.DataProtectionProvider = protectionProvider;
options.TicketDataFormat = new TicketDataFormat(protectionProvider.CreateProtector("Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware", "Cookies", "v2"));
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句