I'm, using RC1 bits and external (Google) authentication, no Identity.EntityFramework.
During login, I set 'Remember me' flag.
Logged-in user survives browser restart (I see cookie set to expire in 14 days) and website restart.
But after some time of inactivity (about 15 min), no matter browser/site were restarted or not, refreshing page lead to signing out, logs says:
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.
This looks like "sessions" in previous ASP, but I do not use any sessions here.
This is my local developer machine, no IIS, direct Kestrel connection to 5000 port, so this is not data-protection problem
Why user forced to sign out?
Update: my Startup.cs
file:
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
is DbContext
and also implements IUserStore<User>
, IUserLoginStore<User>
, IUserEmailStore<User>
, IRoleStore<UserRole>
, IUserClaimStore<User>
Update 2
I enabled detailed (debug) logging and found that when user get signed out - prior to this my IUserStore<User>.FindByIdAsync
is called. With real/existing user id, and function returning correct non-null User. Everything seems good. But my loaded-from-db User
is "rejected" and forced to sign out. There is not additional log messages that can reveal why/where.