alexvw Ответов: 0

Застрял с проверкой подлинности форм-работает локально, но не удаленно


Всем привет,

Я пришел к вам за помощью в выяснении проблемы аутентификации наших форм. Все это работает как заклинание при локальном запуске (либо 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"
, войдите в систему и перейдите на следующую страницу, но с удаленной машины мы всегда перенаправляемся обратно, как если бы аутентификация не удалась.

0 Ответов