有没有办法使用来自用户保存的密码列表的凭证,并使用该凭证代替本地Windows凭证?如何在远程拨入时搜索Active Directory?
我需要根据用户的Active Directory用户名来查找用户的电子邮件地址,以允许他们通过Intranet站点注册电子邮件更新。这似乎很容易,如果用户实际登录到一台机器直接那是域的一部分 - 我可以用自己的身份名称基于他们的用户名搜索的广告:
using(DirectoryEntry root = new DirectoryEntry("LDAP://admachine.domain.local"))
{
using(DirectorySearcher searcher = new DirectorySearcher(root))
{
// strip the domain from the username and find the user in AD
var username = Regex.Replace(Page.User.Identity.Name, @".*\\", string.Empty);
searcher.ReferralChasing = ReferralChasingOption.All;
searcher.SearchScope = SearchScope.Subtree;
searcher.Filter = string.Format("(&(objectCategory=user)(objectClass=person)(sAMAccountName={0}))", username);
var foundUser = searcher.FindOne();
// error checking occurs here...
var email = foundUser.Properties["mail"][0].ToString();
// TODO: stuff with the email address
}
}
但是,如果从一台PC在工作家这不起作用。 Page.Identity.Name
解决了我登录到我自己的PC(MyMachine\Dave
)的名称,忽略了我用于验证我的工作域(WorkDomain\dave.downs
)的存储凭据。
DirectoryEntry
拿起并使用保存的凭证就好了,允许我实际绑定并搜索AD,但是我找不到一种方法将它用作var username
,它将包含我的本地计算机用户名。
有没有一种方法可以真正做我想做的事情,或者我只是以错误的方式去做事/撞着我的头撞砖墙?
如何配置Web服务器认证,以及您如何拨入?我有点困惑,“Page.User.Identity.Name”可以是来自域外的完全不受信任的机器的Windows用户名 - 至少在使用Windows身份验证时。 – Tomalak 2009-02-22 15:19:37
身份验证当前设置为Windows,并使用Cisco VPN客户端拨入。除了使用客户端拨号之外,如果我想在域中执行任何操作(例如浏览计算机),则还必须提供我的域用户名和密码,以便在我的托管密码列表中进行设置。 – 2009-02-22 20:34:51