Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取无法访问页面的Windows或IIS用户_C#_Asp.net_.net - Fatal编程技术网

C# 获取无法访问页面的Windows或IIS用户

C# 获取无法访问页面的Windows或IIS用户,c#,asp.net,.net,C#,Asp.net,.net,我有一个.Net程序集(遗憾的是,我们被困在.Net 3.5中),它可以用于: 在系统上本地运行的.Net应用程序(控制台应用程序、Windows窗体应用程序)中,或 在使用Windows身份验证的IIS web应用程序中 …并且需要获取“当前用户” 通常对于#1,我会使用System.Security.Principal.WindowsIdentity.GetCurrent(),但对于#2,这不起作用,因为它将是IIS应用程序运行时使用的用户帐户(例如,应用程序池);对于#2,我会在请求的处理

我有一个.Net程序集(遗憾的是,我们被困在.Net 3.5中),它可以用于:

  • 在系统上本地运行的.Net应用程序(控制台应用程序、Windows窗体应用程序)中,或

  • 在使用Windows身份验证的IIS web应用程序中

  • …并且需要获取“当前用户”

    通常对于#1,我会使用
    System.Security.Principal.WindowsIdentity.GetCurrent()
    ,但对于#2,这不起作用,因为它将是IIS应用程序运行时使用的用户帐户(例如,应用程序池);对于#2,我会在请求的处理程序中使用
    Page.User.Identity
    ,但在这种情况下,我没有访问该页面的权限

    我想我可以有一种方法,让IIS应用程序将
    页面
    传递给程序集,并且
    用户
    属性不是虚拟的,因此理论上恶意应用程序无法尝试向我提供错误的用户标识,但这似乎相当狡猾。有更好的办法吗

    目标是通过Windows身份验证(通过登录[#1]或使用Windows身份验证[#2]的IIS)识别用户。如果我完全错了,我会全神贯注于如何正确地做到这一点。:-)

    • HttpContext.Current.User
      显然只能在IIS环境中工作
    • Thread.CurrentPrincipal
      将包含IIS中的实际身份验证数据,但对于桌面应用程序,该数据将保持为空。这样做的好处是,您无需添加对
      System.Web
      assembly(在桌面应用程序中)的引用
    • System.Security.Principal.WindowsIdentity.GetCurrent()
      适用于桌面应用程序,但在IIS中,它将返回应用程序池用户,而不是HTTP请求的经过身份验证的用户

    • System.Web.Httpcontext.Current.User
      怎么样?@DavidG:我找到了大部分方法,我找到了
      Httpcontext.Current.Request.LogonUserIdentity
      。这只是另一条通往http://code>HttpContext.Current.User的路径吗?我不这么认为,看看这个@DavidG:fantactive,然后乍一看我会说A)这是我的答案,请你贴出来好吗?B)我下面的答案是错误的(尽管在我的测试中,它确实给了我经过身份验证的用户,而不是应用程序运行时所使用的用户)。我要再检查一遍,但我想是这样的。非常感谢!不管怎样,使用你的程序集的恶意应用程序始终可以控制他们向你提供的用户。例如,他们可能会使用假货,并导致
      System.Security.Principal.WindowsIdentity.GetCurrent()
      调用根据需要返回不同的内容。无意冒犯,但我会质疑你想达到什么目的,看看是否有其他方法,例如强迫打电话的人负责提供身份证明。太好了,谢谢。您帮助我避免了对桌面应用程序中的
      System.Web
      程序集的可避免依赖性!遗憾的是:-|