2009-07-31 62 views
3

我有一個使用Windows身份驗證的asp.net intranet應用程序。幾年前,我使用VS 2005創建了應用程序,並且Windows身份驗證位完美工作。我的web.config具有以下(內線配置 - > system.web元素):HttpContext.Current.User未填充啓用Windows身份驗證

<authentication mode="Windows" /> 
    <authorization> 
     <deny users="?"/> 
    </authorization> 

我測試這在Firefox中確認的憑證是必需的,而且確實提示我爲我的網絡憑據第一時訪問該網站,如果它們無效,我將被拒絕。

但是,當我嘗試訪問HttpContext.Current.User.Identity時,該對象具有Name和AuthenticationType的空字符串,並且Authenticated = false。我想我可能需要啓用WindowsTokenRoleProvider查看周圍的interwebs後,這並沒有改變任何東西。

<roleManager defaultProvider="WindowsProvider" enabled="true" cacheRolesInCookie="false"> 
     <providers> 
      <clear/> 
      <add name="WindowsProvider" type="System.Web.Security.WindowsTokenRoleProvider"/> 
     </providers> 
    </roleManager> 

兩件事情,我,因爲我已經看到了它的工作是通過轉換向導項目升級到VS 2008中最後一次做,我也把它放下了好幾個月,而我的同事可能已經在這裏或那裏工作過。我非常肯定,唯一影響到我的User.Identity的是上面提到的web.config中的值,但顯然我做錯了什麼。其他人遇到類似的問題或看到我做錯了什麼?謝謝。

+0

你在IE中測試過嗎? – 2009-07-31 22:21:26

+0

是的......在IE中測試。我提到Firefox的唯一原因是因爲IE會自動傳遞您的憑據,而FF會強制您通過提示登錄。這就是我知道我阻止匿名訪問,但我仍然得到User.Identity – Rich 2009-07-31 23:22:42

+0

上的空白信息當你說「當我嘗試訪問HttpContext.Current.User.Identity」,在頁面生命週期的哪一點是你這樣做? – Bullines 2009-08-08 17:04:56

回答

2

我相信你需要確保匿名訪問在IIS中爲站點/虛擬關閉。

0

一些想法:

在站點配置上拉出'ASP.NET配置設置'對話框。在「身份驗證」選項卡上,「身份驗證模式」設置爲「Windows」()?在「應用程序」選項卡上,「本地模擬」已設置(我認爲應該取消選中)。

您的服務器是否脫離域名?運行應用程序池的用戶是否改變了?域策略是否更改,防止服務器冒充用戶進行身份驗證檢查(而非授權)?

您是否嘗試過重新安裝您的網站的asp.net擴展? (這本身就是一個很大的話題。)

您可以通過編程方式檢查HttpContext.SkipAuthorization標誌。

1

嘗試添加以獲得您想要的行爲?模擬時未開啓,很多還是網絡服務的名稱或ASPNET用戶

下發生,這裏是Hanselman blog post有來考慮其他瘋狂的想法:

0

你在哪裏檢查這個用戶?在請求週期中,有一些事件在授權發生之前觸發。

如果您在Vista,Windows 7或Windows Server 2008上測試,可能會有其他差異,因爲ASP.Net和IIS管道集成在IIS 7的默認配置中。

3

確保您的<httpModules>部分尚未清除。你的機器的web.config文件中應包括這樣一個片段:

<httpModules> 
     <!-- ... --> 
     <add name="WindowsAuthentication" type="System.Web.Security.WindowsAuthenticationModule" /> 
     <!-- ... --> 
     <add name="AnonymousIdentification" type="System.Web.Security.AnonymousIdentificationModule" /> 
     <!-- ... --> 
    </httpModules> 

這裏最重要的因素是WindowsAuthentication。確保它在您的%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\CONFIG\Web.config文件中。此外,請確保您自己的網站和任何出現在「父」站點站點或文件夾中的web.config文件的<httpModules>部分中都沒有<clear/>標記。如果沒有WindowsAuthentication模塊,瀏覽器是否強制您登錄並不重要...... ASP.NET不會在沒有包含此模塊的情況下實際設置User屬性。

httpModules排序也是顯著,特別是我認爲WindowsAuthentication模塊需要的AnonymousIdentification一個出庭