我在asp.net中创建了一个Web应用程序。在我的项目中,身份验证是通过匹配数据库中的用户名和密码完成的。但是现在客户端在Active Directory身份验证的帮助下要求我在应用程序中自动登录。客户要求建议我使用AD中用户的电子邮件ID进行身份验证。
我尝试在AD中获取记录,我可以获取用户的全名,但我无法获取电子邮件ID,
我尝试了代码:
System.Security.Principal.WindowsIdentity wi = System.Security.Principal.WindowsIdentity.GetCurrent();
string[] a = Context.User.Identity.Name.Split('\\');
System.DirectoryServices.DirectoryEntry ADEntry = new System.DirectoryServices.DirectoryEntry("WinNT://" + a[0] + "/" + a[1]);
string Name = ADEntry.Properties["FullName"].Value.ToString();
更多我使用DirectorySearcher但它生成错误Coulnot搜索客户端服务器中的记录..
答案 0 :(得分:1)
在为公司制作门户网站时,我的情况完全相同。 如果他们不希望您进入他们的AD,那么您可以做的是请求将获得访问门户的人员的NTLogins。创建一个具有NTLogin的简单表,并使用从中访问门户的系统进行身份验证。 查看我使用的示例代码。
// Checking if the user opening this page is listed in the allowed user list against their NT login.
String sUser = Request.ServerVariables["LOGON_USER"].ToLower();
sUser = sUser.Replace("wt\\", "");
//Authentication using a custom auth method.
DatabaseOperations authenticateUser = new DatabaseOperations();
if (!authenticateUser.authenticate(sUser))
{
//unauthorized users will be redirected to access denied page.
Server.Transfer("AccessDenied.aspx", true);
}
确保您的web.config文件中的窗口具有身份验证模式
<authentication mode="Windows"></authentication>
希望这有帮助。
答案 1 :(得分:0)
为了阅读AD数据,我使用这个类。它是为我们的AD设置的,但基本上你可以在params中传入你想要找到的所有“字段”。 但您需要知道哪个字段包含电子邮件地址。 Sysinternals是一个非常好的工具,用于浏览AD,找出你想要的东西,称为ADExplorer。
但我不明白为什么你需要看AD?您是否可以假设用户已经过身份验证,如果他们在网络上,然后依赖Windows身份?
public static Hashtable GetAttributes(string initials, params string[] Attribute)
{
DirectoryEntry directoryEntry = new DirectoryEntry("LDAP://ADNAME");
DirectorySearcher ADSearcher = new DirectorySearcher(directoryEntry);
ADSearcher.Filter = "(sAMAccountName=" + initials + ")";
foreach (string para in Attribute)
{
ADSearcher.PropertiesToLoad.Add(para);
}
SearchResult adSearchResult = ADSearcher.FindOne();
Hashtable hshReturns = new Hashtable();
foreach (string para in Attribute)
{
string strReturn = "";
if (adSearchResult.Properties[para].Count == 0)
strReturn = "";
else
strReturn = ((ResultPropertyValueCollection)adSearchResult.Properties[para])[0].ToString();
hshReturns.Add(para, strReturn);
}
return hshReturns;
}