我继承了使用窗体身份验证的一个项目,但最近的功能要求需要我去得到一些用户的Windows用户名。
这是一个使用窗体身份验证的网站(我不想改变这一点,这将是在这一点上太多的工作),但我有一个功能请求,让我们的内部用户登录更容易(通常无需投入其密码或用户名)。
我现在的方法是可怕的,它涉及到检查的IP地址,看看他们是从我们的IP地址的一个连接,如果是这样,他们重定向到使用Windows身份验证一个单独的项目,然后重定向他们回到原来的页面用包含他们的用户名(如果我被迫留用这种方法我可能会需要加密此,虽然它仍然不是安全的,因为我想)查询字符串。
我可以在我的应用程序中相对容易地进行Windows身份验证,但最困难的部分是获得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用户名,但被证明是相当麻烦的,幸运的是实际的解决方案是相对简单的。
首先,你需要创建一个额外的登录页面(我打电话给我winlogin.aspx),并设置在你的web.config文件中的默认登录页面,如下所示:
<authentication mode="Forms">
<forms name="something" defaultUrl="default.aspx" loginUrl="winlogin.aspx" protection="All" slidingExpiration="true" timeout="90"/>
</authentication>
该winlogin.aspx.cs内部文件中,您验证的Windows用户和使用
FormsAuthentication.RedirectFromLoginPage(username, false/true);
要重定向到任何地方要去。 实际winlogin.aspx页面应该是空白,用户将永远不会看到它。
您需要发布到您的测试Web服务器这下一部分:您查看文件属性在IIS管理器winlogin.aspx并设置WindowsAuthentication为true,匿名身份验证为假。 您还需要创建一个自定义401错误页面指针(矿点,我老的Login.aspx页)。
可以用windows身份验证密码,将这样做的用户,其他人将被重定向到旧的登录页面。
瞧!
有一对夫妇的问题然而,你失去了你的回报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添加引用