Я использую биты RC1 и внешнюю (Google) аутентификацию, без Identity.EntityFramework.
Во время входа я устанавливаю флаг «Запомнить меня».
Вошедший в систему пользователь выдерживает перезапуск браузера (я вижу, что срок действия файла cookie истекает через 14 дней) и перезапуск веб-сайта.
Но после некоторого времени бездействия (около 15 минут), независимо от того, был перезапущен браузер/сайт или нет, обновление страницы приводит к выходу из системы, в журналах говорится:
info: Microsoft.AspNet.Authentication.Cookies.CookieAuthenticationMiddleware:
AuthenticationScheme: Microsoft.AspNet.Identity.Application signed out.
AuthenticationScheme: Microsoft.AspNet.Identity.External signed out.
AuthenticationScheme: Microsoft.AspNet.Identity.TwoFactorUserId signed out.
Это похоже на "сеансы" в предыдущем ASP, но здесь я не использую никаких сеансов.
Это моя локальная машина разработчика, без IIS, прямое подключение Kestrel к порту 5000, так что это не проблема с защитой данных
Почему пользователь вынужден выйти?
Обновление: мой Startup.cs
файл:
public void ConfigureServices(IServiceCollection services)
{
....
var identityBuilder = services
.AddIdentity<User, UserRole>(options =>
{
options.User.AllowedUserNameCharacters = null;
options.Cookies.ApplicationCookie.LoginPath = "/user/login";
options.Cookies.ApplicationCookie.LogoutPath = "/user/logout";
});
identityBuilder.Services
.AddScoped<IUserStore<User>, SportCmsDb>(serviceProvider => serviceProvider.GetService<SportCmsDb>())
.AddScoped<IRoleStore<UserRole>, SportCmsDb>(serviceProvider => serviceProvider.GetService<SportCmsDb>());
identityBuilder
.AddDefaultTokenProviders();
....
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
....
app.UseIdentity();
app.UseGoogleAuthentication(options =>
{
options.ClientId = Configuration["OAuth:Google:ClientId"];
options.ClientSecret = Configuration["OAuth:Google:Secret"];
});
....
SportCmsDb
это DbContext
, а также реализует IUserStore<User>
, IUserLoginStore<User>
, IUserEmailStore<User>
, IRoleStore<UserRole>
, IUserClaimStore<User>
Обновление 2
Я включил подробное (отладочное) ведение журнала и обнаружил, что когда пользователь выходит из системы, до этого вызывается мой IUserStore<User>.FindByIdAsync
. С реальным/существующим идентификатором пользователя и функцией, возвращающей правильный ненулевой пользователь. Все кажется хорошим. Но моя загруженная из базы данных User
"отклонена" и вынуждена выйти из системы. Нет дополнительных сообщений журнала, которые могут показать, почему/где.
app.UseIdentity();
в методе Startup.Configure? - person Ron DeFreitas   schedule 11.05.2016Startup.cs
- person Dmitry   schedule 12.05.2016