Почему пользователи не могут пройти аутентификацию после локального развертывания приложения ASP.NET 4.6 на сервере IIS 10?

В моем приложении веб-форм ASP.NET я использую ASP.NET Identity 2.2 для системы членства. Стадия разработки работает, как и ожидалось. Пользователи проходят аутентификацию и имеют доступ к различным областям веб-сайта в соответствии со своими ролями.

After the deployment to the IIS 10 local server the authentication is overturned. The login is successful and, yet, the user does not authenticate. The Login page loads once again empty and fresh. I know that the login is successful through some test I've made with a literal created right before the redirect.

This is the Login method:

protected void LogIn(object sender, EventArgs e)
    {
        if (IsValid)
        {
            // Validate the user password
            var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();
            var signinManager = Context.GetOwinContext().GetUserManager<ApplicationSignInManager>();

            List<ApplicationUser> us = manager.Users.ToList();

            foreach (var user in us)
            {
                textSuccess.Text += user.UserName + ": ";
                foreach (var role in user.Roles)
                {
                    textSuccess.Text += role.RoleId + ", ";
                }
            }
            // This doen't count login failures towards account lockout
            // To enable password failures to trigger lockout, change to shouldLockout: true
            var result = signinManager.PasswordSignIn(Email.Text, Password.Text, true, shouldLockout: false);

            switch (result)
            {
                case SignInStatus.Success:
                    panelSuccess.Visible = true;
                    IdentityHelper.RedirectToReturnUrl(Request.QueryString["ReturnUrl"], Response);
                    break;
                case SignInStatus.LockedOut:
                    Response.Redirect("/Account/Lockout");
                    break;
                case SignInStatus.RequiresVerification:
                    Response.Redirect(String.Format("/Account/TwoFactorAuthenticationSignIn?ReturnUrl={0}&RememberMe={1}", 
                                                    Request.QueryString["ReturnUrl"],
                                                    RememberMe.Checked),
                                      true);
                    break;
                case SignInStatus.Failure:
                default:
                    FailureText.Text = "Înregistrare eșuată";
                    ErrorMessage.Visible = true;
                    break;
            }
        }
    }

Что я должен делать? Может ли быть что-то не так с конфигурацией OWIN для интегрированного конвейера?


person Ionna    schedule 08.06.2016    source источник


Ответы (1)


В конце концов, пройдя все возможные пути в поисках решения, я обнаружил, что проблема связана с настройкой аутентификации с помощью файлов cookie. Я опубликую причину здесь для любых несчастных исследователей.

In the Startup.Auth.cs file, I had :

app.UseCookieAuthentication(new CookieAuthenticationOptions
            {
                AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
                LoginPath = new PathString("/Account/Login.aspx"),
                CookieSecure = CookieSecureOption.Always,
                AuthenticationMode = Microsoft.Owin.Security.AuthenticationMode.Active,
                Provider = new CookieAuthenticationProvider
                {

                    OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
                        validateInterval: TimeSpan.FromMinutes(30),
                        regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
                }
            });

Поскольку я использовал HTTPS на моем сервере разработки, а не на сервере IIS, где я развернул веб-сайт, параметр CookieSecureOption.Always предотвратил аутентификацию на последнем. В этой ситуации вариант CookieSecureOption.SameAsRequest, который используется по умолчанию, является действительно правильным выбором.

person Ionna    schedule 13.06.2016
comment
Спасибо, @Lonna, это действительно полезно!!! Не могли бы вы показать нам, как вы создаете и назначаете роль пользователя? Поскольку это также является частью вашего действия по регистрации. - person McElie; 05.12.2017