使用表单身份validation获取Windows用户名的更好方法是什么?

我inheritance了一个使用表单身份validation的项目,但最近的function请求要求我获取某些用户的Windows用户名。

这是一个使用Forms身份validation的网站(我不想改变它,此时会有太多工作)但我有一个function请求,允许我们的内部用户更容易登录(通常无需放入他们的密码或用户名)。

我当前的方法是可怕的,它涉及检查IP地址,看看他们是否从我们的一个IP连接,如果是,将它们重定向到使用Windows身份validation的单独项目,然后将其重定向回原始页面包含其用户名的查询字符串(如果我被迫继续使用此方法,我可能需要加密它,尽管它仍然不如我想的那样安全)。

我可以在我的应用程序中相对容易地执行Windows身份validation,但是困难的部分是获取Windows用户名。 我无法弄清楚如何做到这一点,因此我非常难看的方法。

任何帮助将不胜感激。

编辑:我的辅助应用程序只是这样做:

string username = HttpContext.Current.User.Identity.Name; string retpath = Request.QueryString["retpath"]; Response.Redirect("http://" + retpath + "?id=" + username); 

这篇文章包含了答案,(感谢vinodpthmn): http : //msdn.microsoft.com/en-us/library/ms972958.aspx我在研究中发现了这篇文章的链接,但没有一个有效! 很高兴我终于能够阅读并解决我的问题了。

正如我所提到的,我只需要获取客户端的Windows用户名,但结果certificate这很麻烦,谢天谢地,实际的解决方案相对简单。

首先,您需要创建一个额外的登录页面(我称之为winlogin.aspx)并将其设置为Web.Config文件中的默认登录页面,如下所示:

    

在winlogin.aspx.cs文件中,您可以对Windows用户进行身份validation并使用

 FormsAuthentication.RedirectFromLoginPage(username, false/true); 

将它们重定向到他们去的地方。 实际的winlogin.aspx页面应为空白,用户永远不会看到它。

您需要将以下部分发布到测试Web服务器:在IIS管理器中访问winlogin.aspx的文件属性,并将WindowsAuthentication设置为true,将匿名身份validation设置为false。 您还需要创建一个自定义401错误页面指针(我的指向旧的Login.aspx页面)。

可以使用Windows身份validation登录的用户将这样做,其他人将被重定向到旧的登录页面。

瞧!

但是有一些问题,你丢失了你的返回URL(你不能在自定义401错误页面的链接中使用“=”,所以没有任何东西可以解析)所以你可能想要在人们设置cookie时被重定向到winlogin页面并访问表单登录页面中的cookie以适当地重定向用户。

如果有人有任何疑问,我建议您阅读上面链接的文章,或者随时在这里提问。

谢谢大家的帮助!

您可以使用目录服务

 PrincipalContext pc = null; UserPrincipal principal = null; var username = User.Identity.Name; pc = new PrincipalContext(ContextType.Domain, "give your domain name here"); principal = UserPrincipal.FindByIdentity(pc, userName); var firstName = principal.GivenName ?? string.Empty; var lastName = principal.Surname ?? string.Empty; 

请添加System.DirectoryServices.AccountManagement的参考