获取系统在c#中登录的用户名,该用户名也适用于IIS

时间:2012-12-28 16:18:44

标签: c# iis iis-7 iis-6 windows-authentication

我认为获取登录用户名很简单,事实上,它在堆栈溢出时可用的大部分响应都能正常工作,但是当我发布网站时,所有方法都失败了。 任何人都可以指导我从Windows获取登录用户的名称,条件如下。

  1. 我只需要登录用户名,所以在编写回复时请忘记AD。

  2. 我无法更改为Windows身份验证模式,因为用户可能是不属于公司但仍可访问我的Intranet网站的访客用户

  3. 由于用户数超过6000
  4. ,因此无法更改用户浏览器设置
  5. 我无法禁用匿名身份验证,因为我希望每个人都能够使用该网站

  6. 我已经尝试过以下解决方案,当我在调试模式下运行网站时所有工作正常但是当我在IIS上发布网站时都无法返回用户名所以请帮我一些新的解决方案

  7. string _windowLogonUserName = System.Environment.UserName.ToString()
    

    string _windowLogonUserName = 
        WindowsIdentity.GetCurrent().Name.Remove(0, _adDomainName.Length + 1)
    

    string _windowLogonUserName = 
        System.Web.HttpContext.Current.User.Identity.Name.ToString(); 
    

    System.Security.Principal.WindowsIdentity.GetCurrent().Name;
    

    AppDomain appDomain = Thread.GetDomain();
    appDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
    WindowsPrincipal windowsPrincipal = (WindowsPrincipal)Thread.CurrentPrincipal;
    Logger.Write("username principal" + windowsPrincipal.Identity.Name);
    Request.ServerVariables["LOGON_USER"]
    

1 个答案:

答案 0 :(得分:2)

听起来您正在AD网域之外发布网站。如果服务器不在域上,它将无法验证(甚至接受)Windows用户。基本的答案是你无法得到它。

如果服务器是内部的(在域上),那么您可以在IIS中启用集成的Windows身份验证。 Here's a reference