2013-05-22 166 views
0

我開發了一個.NET 4.0 ASP.NET網站。所有的工作都很棒。 在IIS7.5,WS2008R2 Enterprise +上開發的所有更新。奇怪的ASP.NET身份驗證問題

我部署到WS2003服務器。幾乎所有的工作除了當我登錄到網站(Forms auth)時,它會將我重定向回登錄頁面!沒有錯誤,沒有任何東西。 有時,當我設法通過它,並導航到另一個頁面或執行像點擊按鈕一樣的操作時,我會被重定向回登錄頁面!

確信服務器設置存在問題,IT人員安裝了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

聽起來像你不使用像Fiddler一樣的http調試器。嘗試一下,你可以通過這種方式發現你的問題。 –

+0

在單個服務器上(加入域)。嘗試的提琴手 - 顯示沒有明顯的,但302重定向到登錄頁面 –

回答

0

如果我沒有記錯我已經經歷了類似的東西在過去......你可以在您的web.config文件中缺少一個machinekey

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

/> 
+0

謝謝。不,只是一個獨立的服務器。提琴手沒有帶來任何明顯的。顯示302回到登錄頁面,但多數民衆贊成在它。我忘了提及我在site.master有這個代碼,但不認爲這是一個問題:/ /所有頁面需要授權訪問(即用戶必須登錄) if(!this.Page.User.Identity.IsAuthenticated || this.CurrentLoggedInUser == null) {FormsAuthentication.RedirectToLoginPage();到Response.End(); } –

+0

謝謝,但我不明白爲什麼我應該補充說,如果它在我自己的本地開發服務器上正常工作? –

+0

您是否使用用戶登錄憑證保存cookie? ASP.NET使用的cookie稱爲'.ASPXAUTH' http://stackoverflow.com/q/423467/114029 ...你有一個複選框,用戶可以點擊並選擇記住我嗎? –