Проблема с входом при подключении к Visual Studio (IIS Express) с iPad

#c# #ios #asp.net-mvc #model-view-controller #asp.net-mvc-5

#c# #iOS #asp.net-mvc #модель-представление-контроллер #asp.net-mvc-5

Вопрос:

У меня есть приложение MVC5, которое развернуто в Azure. Теперь, чтобы протестировать его локально, я запускаю свое приложение с помощью Visual Studio (2019), затем запускаю сайт в браузере своих мобильных устройств.

Проблема в том, что когда я делаю это со своего iPad и вхожу в систему, после того, как я ввожу имя пользователя / пароль и нажимаю войти, я немедленно возвращаюсь к экрану входа.

Я пробовал разные браузеры на iPad. Я попытался очистить кеш на них. Я перезапустил свой компьютер и свой iPad. Все та же проблема. Я не вижу никаких ошибок. Но это работает, если я использую свой iPhone для входа в систему или из настольного браузера. Если он развернут в Azure, я могу войти в систему отовсюду, включая iPad.

Я выполняю отладку в коде и даже вижу, что вход в систему выполнен успешно, а возвращаемый URL-адрес является правильным URL:

  var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, true);
            switch (result)
            {
                case SignInStatus.Success:
                    await UserManager.SetLockoutEndDateAsync(user?.Id, new DateTimeOffset(DateTime.UtcNow));
                    await UserManager.ResetAccessFailedCountAsync(user?.Id);

                    return RedirectToLocal(returnUrl);

  

Я даже пытался форсировать ситуацию, поместив следующий код в начало моего метода входа в систему:

                 AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
                
                System.Web.HttpContext.Current.Session.Clear();
                System.Web.HttpContext.Current.Session.Abandon();
                
                Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1));
                Response.Cache.SetCacheability(HttpCacheability.NoCache);
                Response.Cache.SetNoStore();

  

Может кто-нибудь помочь, пожалуйста? Спасибо.

Ответ №1:

Надеюсь, когда-нибудь это сэкономит чьи-то часы работы. Проблема была связана с наличием CookieSameSite в Startup.Auth.cs:

        app.UseCookieAuthentication(new CookieAuthenticationOptions
       {
           ExpireTimeSpan = TimeSpan.FromDays(14),
           AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
           LoginPath = new PathString("/Account/Login"),
           SlidingExpiration = true,
           CookieSameSite = SameSiteMode.Strict,
           Provider = new CookieAuthenticationProvider
           {
               OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(TimeSpan.FromMinutes(30), (manager, user) => user.GenerateUserIdentityAsync(manager))
           }
       });  
  

Как только я удалил CookieSameSite = SameSiteMode.Strict, , он начал работать.