2011-06-08 96 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