Застрял с проверкой подлинности форм-работает локально, но не удаленно
Всем привет,
Я пришел к вам за помощью в выяснении проблемы аутентификации наших форм. Все это работает как заклинание при локальном запуске (либо dev. Машина или сервер), но когда мы пытаемся получить доступ к сайту по сети, он терпит неудачу.
Вот фрагмент web. config...
<authentication mode="Forms"> <forms loginUrl="~/Inicio/Login.aspx" name=".CesAUTH" timeout="2" protection="All" slidingExpiration="true" defaultUrl="~/Inicio/Login.aspx" requireSSL="true"/> </authentication> <authorization> <deny users="?"/> <allow users="*"/> </authorization> </system.web> <location path="Inicio"> <system.web> <authorization> <allow users="*"/> </authorization> </system.web> </location>
Вот код, используемый для создания файла cookie аутентификации после проверки учетных данных Пользователя в нашей базе данных:
//Se genera la cookie para la autenticación del usuario HttpCookie authCookie = FormsAuthentication.GetAuthCookie(UsrRUT.ToString(), false); FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(authCookie.Value); FormsAuthenticationTicket newTicket = new FormsAuthenticationTicket(ticket.Version, ticket.Name, ticket.IssueDate, ticket.Expiration, ticket.IsPersistent, UsrRUT.ToString() + "_" + DateTime.Now.ToString("yyyyMMddHHmmssfff")); authCookie.Value = FormsAuthentication.Encrypt(newTicket); HttpContext.Current.Response.Cookies.Add(authCookie); //Se redirecciona la solictud del login en caso de haber sido generada desde otra página FormsAuthentication.RedirectFromLoginPage(UsrRUT.ToString(), true);
Здесь код, используемый в Global. asax:
void Application_OnPostAuthenticateRequest(object sender, EventArgs e) { // Referencia al usuraio actual IPrincipal usr = HttpContext.Current.User; if (usr.Identity.IsAuthenticated && usr.Identity.AuthenticationType == "Forms") { FormsIdentity fIdent = usr.Identity as FormsIdentity; // Genera el objeto CustomIdentity personalizado en base a el FormsAuthenticationTicket CustomIdentity ci = new CustomIdentity(fIdent.Ticket); // Genra el objeto CustomPrincipal CustomPrincipal p = new CustomPrincipal(ci); // Agregas los objetos al contexto e hilo de ejecución actuales HttpContext.Current.User = p; Thread.CurrentPrincipal = p; } }
Опять же, при запуске сайта либо в режиме отладки (локальная машина), либо на самом опубликованном сайте на нашем сервере (локально)(IIS 6) все это работает. Но если мы попытаемся войти с удаленного компьютера на опубликованный сайт, нам всегда разрешат ввести учетные данные и всегда перенаправят обратно на страницу входа с той, на которую мы должны были попасть. Вот URL-адрес, который мы можем видеть в наших браузерах:
https://cesiones.cl/Inicio/Login.aspx?ReturnUrl=%2fWebFrms%2fSuccessLogon.aspx
Сможет ли кто-нибудь точно определить, что мы делаем не так? Большое спасибо за вашу столь необходимую помощь.
Что я уже пробовал:
Мы попытались перестроить тег аутентификации форм в нашем web.config с нуля, добавляя по одному атрибуту за раз, без и с(текущим кодом), используя классы CustomIdentity или CustomIdentity, с(out) кодированием события Application_OnPostAuthenticateRequest в файле global.asax.
Но ничего не меняется. Мы можем получить доступ к сайту с самого сервера, используя его URL-адрес:
https://cesiones.cl/Inicio/Login.aspx", войдите в систему и перейдите на следующую страницу, но с удаленной машины мы всегда перенаправляемся обратно, как если бы аутентификация не удалась.