2016-09-22 3 views
4

Я пытаюсь найти ясный ответ о том, почему я вижу это поведение. Я использую проект шаблона Microsoft ASP.NET Identity, чтобы увидеть, как работает Identity, OWIN и т. Д. Я замечаю, что каждый раз, когда я делаю запрос (перейдите в «Контакты», «Управление» и т. Д.). Мой AspNet.ApplicationCookie имеет другую зашифрованную строку (при использовании инструментов разработчика в Chrome или IE). Сначала я подумал, что это может быть потому, что я не предъявлял никаких претензий к пользователю, но я попытался добавить некоторые претензии и все еще видел такое же поведение. Кто-нибудь видел/знал почему? Это просто зашифрованные изменения в cookie из-за того, как промежуточное ПО OWIN шифрует файл cookie? Любая помощь приветствуется.ASP.Net Identity ASPNET.ApplicationCookie выглядит по-другому, когда я его проверяю

Я прочитал https://brockallen.com/2013/10/24/a-primer-on-owin-cookie-authentication-middleware-for-the-asp-net-developer/
и http://tech.trailmax.info/2014/08/aspnet-identity-cookie-format/

но ни на самом деле получает именно поэтому я мог видеть поведение я вижу. Еще раз спасибо.

UPDATE: Вот мой startup.Auth.cs

public void ConfigureAuth(IAppBuilder app) 
    { 

     // Configure the db context, user manager and signin manager to use a single instance per request 
     app.CreatePerOwinContext(ApplicationDbContext.Create); 
     app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create); 
     app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create); 

     // Enable the application to use a cookie to store information for the signed in user 
     // and to use a cookie to temporarily store information about a user logging in with a third party login provider 
     // Configure the sign in cookie 
     app.UseCookieAuthentication(new CookieAuthenticationOptions 
     { 

      AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
      LoginPath = new PathString("/Account/Login"), 
      LogoutPath = new PathString("/Account/LogOff"), 
      Provider = new CookieAuthenticationProvider 
      { 
       // Enables the application to validate the security stamp when the user logs in. 
       // This is a security feature which is used when you change a password or add an external login to your account. 
       OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
        validateInterval: TimeSpan.FromMinutes(0), 
        regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)) 
      }, 
     });    
     //app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie); 

     // these two lines of code are needed if you are using any of the external authentication middleware 
     app.Properties["Microsoft.Owin.Security.Constants.DefaultSignInAsAuthenticationType"] = "ExternalCookie"; 
     app.UseCookieAuthentication(new CookieAuthenticationOptions 
     { 
      AuthenticationType = "ExternalCookie", 
      AuthenticationMode = Microsoft.Owin.Security.AuthenticationMode.Passive, 
     }); 

     // Enables the application to temporarily store user information when they are verifying the second factor in the two-factor authentication process. 
     app.UseTwoFactorSignInCookie(DefaultAuthenticationTypes.TwoFactorCookie, TimeSpan.FromMinutes(5)); 

     // Enables the application to remember the second login verification factor such as phone or email. 
     // Once you check this option, your second step of verification during the login process will be remembered on the device where you logged in from. 
     // This is similar to the RememberMe option when you log in. 
     app.UseTwoFactorRememberBrowserCookie(DefaultAuthenticationTypes.TwoFactorRememberBrowserCookie); 
} 
+0

Покажите свой 'Startup.Auth.cs' файл ответа мог бы будь там. – trailmax

+0

Несомненно, я обновил свой пост. Еще раз спасибо! –

ответ

2

Ваш вопрос в соответствии с validateInterval: TimeSpan.FromMinutes(0), Здесь вы эффективно сказать «регенерировать печенье на каждом request` - это для глобального печенья недействительности, когда штамп безопасности . изменен

Набор validateInterval быть пару минут. -. вы не получите куки признаны недействительными на каждом запросе, только каждые однако минут вы установили, что это будет

+0

О, ладно, я вижу. Я установил его равным нулю, поэтому, когда пользователь сбросит свой пароль, все остальные сеансы будут немедленно отключены. Я установил его в 1 и увидел описанное вами поведение. Спасибо за помощь. Я ценю это. –

+1

@AurelioRama Также наличие интервала проверки в ноль означает, что вы попадаете в базу данных с помощью 'select' на запросе EVERY - в какой-то момент это вызовет проблему с производительностью. – trailmax

+0

Это замечательный момент. Сейчас я просто делаю доказательство концепции, чтобы перенести нашу старую аутентификацию, чтобы использовать идентификатор ASP.Net. Определенно нужно принять это во внимание. Спасибо за головы! –

Смежные вопросы