我正在尝试使用LDAP验证用户并返回用户所属的所有组:
我能够验证但无法获得所有组。
以下代码在本地计算机上运行,但在服务器上部署时返回错误。
public bool Authenticate1(string userName, string password, ref List<string> List)
{
const int ERROR_LOGIN_FAILURE = -2147023570;
DirectoryEntry root = new DirectoryEntry("LDAP://rootDSE", userName, password, AuthenticationTypes.Secure);
using (root)
{
try
{
Object temp = root.NativeObject;
string defaultNamingContext = "";
defaultNamingContext = root.Properties["defaultNamingContext"].Value.ToString();
DirectoryEntry default1 = new DirectoryEntry("LDAP://" + defaultNamingContext, userName, password, AuthenticationTypes.Secure);
DirectorySearcher dSearch = new DirectorySearcher(default1.Path);
dSearch.Filter = "(SAMAccountName=" + userName + ")";
dynamic a = dSearch.FindOne();
**DirectoryEntry obUser = new DirectoryEntry(a.Path);**
object obGroups = obUser.Invoke("Groups");
foreach (object ob in (IEnumerable)obGroups)
{
// Create object for each group.
DirectoryEntry obGpEntry = new DirectoryEntry(ob);
dynamic vGroup = obGpEntry.Name;
vGroup = vGroup.Substring(vGroup.IndexOf("=") + 1, vGroup.Length - vGroup.IndexOf("=") - 1);
List.Add(vGroup);
}
return true;
}
catch (System.Runtime.InteropServices.COMException ex)
{
List.Add(ex.Message);
List.Add(ex.ToString());
if (ex.ErrorCode != ERROR_LOGIN_FAILURE)
{
throw;
}
return false;
}
}
}
此代码跟随行抛出错误
DirectoryEntry obUser = new DirectoryEntry(a.Path);
未将对象引用设置为对象的实例。 在服务器池上运行ApplicationPoolIdentity。根据公司政策,它应该在此之下运行。
不确定我在服务器上缺少什么?
干杯 哈利!
答案 0 :(得分:1)
如果您使用的是.NET 3.5及更高版本,则应查看$sql = "INSERT INTO student(Student,School,PR) VALUES ('$_POST[name]','$_POST[school]','$_POST[pr]')";
mysqli_query($sql,$MySQLiconn);
(S.DS.AM)命名空间。在这里阅读所有相关内容:
基本上,您可以定义域上下文并轻松在AD中查找用户和/或组:
System.DirectoryServices.AccountManagement
新的S.DS.AM让您可以轻松地与AD中的用户和群组一起玩!