我继承了一个使用表单身份验证的项目,但最近的一项功能请求要求我获取某些用户的Windows用户名。
它是一个使用表单身份验证的网站(我不想改变它,此时会有太多工作)但我有一个功能请求,允许我们的内部用户更容易登录(通常无需输入密码或用户名。)
我当前的方法是可怕的,它涉及检查IP地址以查看他们是否从我们的某个IP连接,如果是,将它们重定向到使用Windows身份验证的单独项目,然后将其重定向回包含其用户名的查询字符串的原始页面(如果我被迫继续使用此方法,我可能需要对此进行加密,尽管它仍然不如我所希望的那样安全。)
我可以在我的应用程序中相对容易地执行Windows身份验证,但是困难的部分是获取Windows用户名。我无法弄清楚如何做到这一点,因此我非常难看。
任何帮助都会非常感激。
编辑:我的辅助应用程序只是这样做:
string username = HttpContext.Current.User.Identity.Name;
string retpath = Request.QueryString["retpath"];
Response.Redirect("http://" + retpath + "?id=" + username);
答案 0 :(得分:2)
本文包含答案,(感谢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,并将匿名身份验证设置为false。您还需要创建一个自定义401错误页面指针(我的指向旧的Login.aspx页面)。
可以使用Windows身份验证登录的用户将这样做,其他人将被重定向到旧的登录页面。
瞧!
然而,有一些问题,您丢失了返回URL(您无法在自定义401错误页面的链接中使用“=”,因此无法解析任何内容)因此您可能希望设置一个每当人们被重定向到winlogin页面并访问表单登录页面中的cookie以正确地重定向用户时,就会使用cookie。
如果有人有任何疑问,我建议您阅读上面链接的文章,或者随时在这里提问。
感谢大家的帮助!
答案 1 :(得分:-1)
您可以使用目录服务
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
添加参考