2011-06-08 95 views
0

我有以下代碼:ASP.NET驗證問題

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (User.Identity.IsAuthenticated) 
      lblAuthentication.Text = 
      "Authenticated user: " + User.Identity.Name; 
     else 
      lblAuthentication.Text = 
      "User not authenticated. Anonymous access "; 

     lblWindowsIdentity.Text = 
      "Windows identity: " + WindowsIdentity.GetCurrent().Name; 

    } // Page_Load() 

web.config設置如下:

<authentication mode="Windows" /> 

    <authorization> 
     <allow users="*" /> 
    </authorization> 

當鮑勃登錄誰是管理員我獲得以下輸出

Authenticated user: Bob-PC\Bob 
Windows identity: Bob-PC\Bob 

附加代碼顯示了我:

Administrator: True 
    User: True 
    Guest: False 
    PowerUser: False 
    AccountOperator: False 
    SystemOperator: False 

然後我切換用戶(Windows Vista),以訪客身份登錄,瀏覽到同一網站,我得到相同的輸出?

Authenticated user: Bob-PC\Bob 
Windows identity: Bob-PC\Bob 

    Administrator: True 
    User: True 
    Guest: False 
    PowerUser: False 
    AccountOperator: False 
    SystemOperator: False 

爲什麼我爲不同的用戶獲得相同的輸出?

+0

確保沒有緩存。你使用IE嗎?你在本地運行網站嗎? – marto 2011-06-08 11:00:43

+0

除非您使用模擬,否則您將無法獲取瀏覽用戶的任何憑據... – Exitos 2011-06-08 11:03:42

回答

0

WindowsIdentity.GetCurrent()。Name是他正在運行IIS線程的身份。

0

由於該網站在Bob-PC \ Bob的上下文中運行,而不是您登錄的用戶。您正在進行的電話正在查看網站進程(而不是在網站外部發生的事情[其餘窗口])。

如果您使用的是IIS,你可以改變身份的工作進程下通過修改承載網站的應用程序池的性能運行....

注意:您可以在.NET中使用模擬強制IIS在瀏覽用戶的上下文中操作。這就是你保證運行在局域網上的應用程序的一種方式,例如運行Windows網絡。但爲了這個工作,你必須使用IE作爲其他瀏覽器不通過域身份驗證憑證)。

+0

您好。 您寫道:「如果您使用IIS,您可以通過修改承載網站的應用程序池的屬性來更改工作進程所運行的標識......」 您怎麼能這樣做? 謝謝 – ChrisPeeters 2011-06-08 11:33:52

+0

IIS7 - >進入應用程序池(右鍵),進入高級設置,進入'進程模型' - >更改身份,回收應用程序池。 – Exitos 2011-06-08 13:36:39

+0

您可以使用進程資源管理器根據憑證/用戶真正查看進程下的進程。讓我知道這是怎麼回事,並且如果沒問題的話標記爲正確的.... – Exitos 2011-06-08 13:43:25