【问题标题】:ASP.NET authentication questionASP.NET 身份验证问题
【发布时间】:2011-06-08 10:57:43
【问题描述】:

我在一个 aspx 页面中有以下代码:

   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>

当以管理员 Bob 身份登录时,我得到以下输出

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 

为什么我会为不同的用户获得相同的输出?

【问题讨论】:

  • 确保没有缓存。你用的是IE吗?您是在本地运行网站吗?
  • 除非您使用模拟,否则您不会获取浏览用户的任何凭据...

标签: asp.net windows-authentication


【解决方案1】:

WindowsIdentity.GetCurrent().Name 是运行 IIS 线程的身份。

【讨论】:

    【解决方案2】:

    因为网站在 Bob-PC\Bob 的上下文中运行,而不是您登录的用户。您正在拨打的电话正在查看网站进程(而不是网站之外发生的事情[其余窗口])。

    如果您使用的是 IIS,则可以通过修改托管网站的应用程序池的属性来更改工作进程运行的身份......

    注意:您可以在 .net 中使用模拟来强制 IIS 在浏览用户的上下文中运行。这就是保护在 LAN 上运行的应用程序的方式,例如在运行 Windows 网络的情况下。但为了让它工作,你必须使用 IE,因为其他浏览器不通过域身份验证凭据)。

    【讨论】:

    • 你好。你写“如果你使用 IIS,你可以通过修改托管网站的应用程序池的属性来更改工作进程运行的身份......”你怎么能做到这一点?谢谢
    • IIS7 --> 进入应用程序池(右键),进入高级设置,进入'进程模型' --> 更改身份,回收应用程序池。
    • 您可以使用进程资源管理器来真正了解进程在凭据/用户方面的幕后情况。让我知道这是怎么回事,如果可以,请标记为正确....
    猜你喜欢
    • 2017-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-27
    • 2013-05-17
    • 1970-01-01
    相关资源
    最近更新 更多