2013-05-22 2 views
0

Я разработал веб-сайт .NET 4.0 ASP.NET. Все работает отлично. Разработано на IIS7.5, WS2008R2 Enterprise + все обновления.Weird ASP.NET Проблемы с аутентификацией

Я развертываю сервер WS2003. Все почти работает, за исключением случаев, когда я вхожу на сайт (Forms auth), он перенаправляет меня обратно на страницу входа! Нет ошибок, ничего. Иногда, когда мне удается это преодолеть, и перейдите на другую страницу или выполните действие, как одним нажатием кнопки, я перенаправляюсь обратно на страницу входа!

Убедившись, что возникла проблема с настройкой сервера, ИТ-парень установил WS2008R2 + все обновления. Отлично, поэтому я развернул сайт на этом. Угадай, что? ЕЩЕ ЖЕ ЖЕ ПРОБЛЕМА!

Что дает? Почему бы вам перенаправить его обратно на страницу входа в систему при входе в систему (без кода для этого) или при выполнении действия?

Другое дело, я использую элемент управления Telerik, а также расширители ASP.NET AJAX. Сервер, похоже, не загружает их (никаких ошибок на сервере и клиенте). Предполагается, что это выпадающие меню, и это не работает в дополнение к календарю AJAX для всплывающего окна - это тоже не работает.

Я не уверен, что теперь делать, поскольку это расстраивает и НИКОГДА не сталкиваюсь с такой проблемой.

здесь является частью моего файла конфигурации:

<configSections> 
    <sectionGroup name="system.web"> 
     <section name="sanitizer" requirePermission="false" type="AjaxControlToolkit.Sanitizer.ProviderSanitizerSection, AjaxControlToolkit"/> 
    </sectionGroup> 
    </configSections> 

<system.web> 
    <globalization culture="en-gb" uiCulture="en-gb"/> 
    <httpRuntime maxRequestLength="100240"/> 
    <trust level="Full"/> 
    <sanitizer defaultProvider="HtmlAgilityPackSanitizerProvider"> 
     <providers> 
     <add name="HtmlAgilityPackSanitizerProvider" type="AjaxControlToolkit.Sanitizer.HtmlAgilityPackSanitizerProvider"/> 
     </providers> 
    </sanitizer> 
    <compilation debug="true" targetFramework="4.0"> 

     <assemblies> 
     <add assembly="Telerik.Web.UI, Version=2012.3.1017.40, Culture=neutral, PublicKeyToken=949410a6b6ad1e71"/> 
     </assemblies> 
    </compilation> 
    <sessionState mode="InProc" timeout="30"/> 
    <authentication mode="Forms"> 
     <forms name="RegisteredUsers" defaultUrl="~/Help/About.aspx" path="/" protection="All" loginUrl="~/Account/Login.aspx" timeout="31"/> 
    </authentication> 
    <authorization> 
     <deny users="?"/> 
    </authorization> 
    <httpHandlers> 
    <add path="Telerik.Web.UI.WebResource.axd" type="Telerik.Web.UI.WebResource" verb="*" validate="false"/> 
    </httpHandlers> 
    </system.web> 
    <location path="Account"> 
    <system.web> 
     <authorization> 
     <allow users="*"/> 
     </authorization> 
    </system.web> 
    </location> 
    <location path="Public"> 
    <system.web> 
     <authorization> 
     <allow users="*"/> 
     </authorization> 
    </system.web> 
    </location> 
    <location path="Styles"> 
    <system.web> 
     <authorization> 
     <allow users="*"/> 
     </authorization> 
    </system.web> 
    </location> 
    <location path="Scripts"> 
    <system.web> 
     <authorization> 
     <allow users="*"/> 
     </authorization> 
    </system.web> 
    </location> 
    <location path="Images"> 
    <system.web> 
     <authorization> 
     <allow users="*"/> 
     </authorization> 
    </system.web> 
    </location> 
    <location path="Help"> 
    <system.web> 
     <authorization> 
     <allow users="*"/> 
     </authorization> 
    </system.web> 
    </location> 
    <system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    <validation validateIntegratedModeConfiguration="false"/> 
    <handlers> 
     <add name="Telerik_Web_UI_WebResource_axd" verb="*" preCondition="integratedMode" path="Telerik.Web.UI.WebResource.axd" type="Telerik.Web.UI.WebResource"/> 
    </handlers> 
    </system.webServer> 

Что касается кода аутентификации:

// log them in and authenticate 
           FormsAuthentication.SetAuthCookie(this.txtUsername.Text, false); 
           FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, this.txtUsername.Text, DateTime.Now, DateTime.Now.AddYears(1), false, this.txtUsername.Text); 

           // For security reasons we may hash the cookies 
           string hashCookies = FormsAuthentication.Encrypt(ticket); 
           HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, hashCookies); 
           cookie.Path = FormsAuthentication.FormsCookiePath; 
           cookie.Expires = ticket.Expiration; 

           // add the cookie to user browser 
           Response.Cookies.Add(cookie); 

            Session[CommonStrings.USER_LOGGED_IN] = userResponse.User; 



           // if DefaultWebPage is not null then redirect to that otherwise, default behavior. 
           if (!string.IsNullOrWhiteSpace(userResponse.User.DefaultWebPage)) 
           { 
            Response.Redirect(userResponse.User.DefaultWebPage, false); 
           } 
           else 
           { 
            FormsAuthentication.RedirectFromLoginPage(this.txtUsername.Text, false); 
           } 
+0

ли приложение на одном сервере или Mult iple? Если это на кластере, вы можете попасть на другой сервер, чем тот, который вы только что использовали для входа в систему. – Stokedout

+1

Похоже, вы не используете HTTP-отладчик, как Fiddler. Попытайтесь, вы могли бы обнаружить ваши проблемы таким образом. –

+0

На одном сервере (присоединен к домену). Пробовал скрипач - не показывает ничего очевидного, но 302 перенаправляет на страницу входа в систему –

ответ

0

Если я правильно помню, я испытал что-то подобное в прошлом ... ты может пропускать machinekey в вашем web.config файле:

<machineKey 
    validationKey="EFE16B647D7AF66E1D223402ECC44428B424A442873221EC47E24358B58FEDEE7DFB97B4907605AC74670B5BC419C1C9E8980D43D84DA895275F9FB30E5078D6" 
    decryptionKey="F8BB1E557DEE7AE224A08FCFB429498D218D4D65FF19CA0E160F5D68382B53C7" 
    validation="SHA1" decryption="AES" 

/> 
+0

Спасибо. Нет, просто автономный сервер. Fiddler не приносит ничего очевидного. показывает 302, возвращаясь к странице входа, но это так. Я забыл упомянуть, что у меня есть этот код в site.master, но не думаю, что это проблема: // Все страницы требуют авторизованного доступа (т. Е. Пользователь должен войти в систему) if (! This.Page.User.Identity.IsAuthenticated || this.CurrentLoggedInUser == null) {FormsAuthentication.RedirectToLoginPage(); Response.End(); } –

+0

спасибо, но я не понимаю, почему я должен добавить это, если он отлично работает на моем собственном локальном dev-сервере? –

+0

Вы сохраняете файл cookie с учетными данными пользователя? Использование cookie ASP.NET называется '.ASPXAUTH' http://stackoverflow.com/q/423467/114029 ... У вас есть флажок, который пользователь может щелкнуть и выбрать, чтобы запомнить меня? –

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