我正在企业环境中开发基于Django的应用程序,并希望使用现有的Active Directory系统来验证用户(因此他们没有获得另一个登录/密码组合).我还想继续使用Django的用户授权/权限系统来管理用户功能.
有没有人有这方面的好例子?
这两种LDAP协议实现之间的主要差异是什么?对于异质环境哪个更好?有关此主题的任何好网站?
使用LDAP检查用户名/密码就像尝试绑定该用户并注明结果一样简单,或者是否有特殊的LDAP"检查密码"功能?
我正在尝试在处理凌乱的LDAP存储库设置问题时获得更多"幕后"理解.
(注意:这适用于密码未在自定义属性中存储为哈希的情况;这种情况很容易管理)
人们常说,使用LDAP是存储用户数据的好方法.这是因为用户的"目录"是分层的,很少变化.但在我看来,并不排除使用RDBMS.使用LDAP可能是什么原因?我想在LDAP中存储多值字段或添加自定义字段可能更容易,但也可以在数据库中完成(除非你有很多记录)
我需要运行一个LDAP查询,它将在根查询中搜索两个特定的组织单位(OU),但是我很难对它进行搜索.我在下面尝试了以下查询,但都没有成功:
(|(OU=Staff,DC=my,DC=super,DC=org)(OU=Vendors,DC=my,DC=super,DC=org))
((OU=Staff,DC=my,DC=super,DC=org) | (OU=Vendors,DC=my,DC=super,DC=org))
Run Code Online (Sandbox Code Playgroud)
我的问题是; 是否可以在单个查询中查询多个单个OU ?假设它是根LDAP查询中此类表达式的正确语法.
我有一个用于检查用户凭据的小型C#解决方案.它适用于我的两个队友,但在我的电脑上我得到了一个例外.
相关代码:
PrincipalContext context = new PrincipalContext(ContextType.Domain);
if (context.ValidateCredentials(System.Environment.UserDomainName + "\\" + usr, pwd))
return true;
else
return false;
Run Code Online (Sandbox Code Playgroud)
例外是:
DirectoryOperationException,"服务器无法处理目录请求.".
我尝试使用显式服务器名称和636端口号创建上下文,但这也没有帮助.
有任何想法吗?
以下代码列出了一些(但不是全部)Active Directory组.为什么?
我正在尝试列出所有安全组,通讯组,计算机组等.我是否指定了错误objectClass
?
private static void ListGroups()
{
DirectoryEntry objADAM = default(DirectoryEntry);
DirectoryEntry objGroupEntry = default(DirectoryEntry);
DirectorySearcher objSearchADAM = default(DirectorySearcher);
SearchResultCollection objSearchResults = default(SearchResultCollection);
SearchResult myResult=null;
objADAM = new DirectoryEntry(LDAP);
objADAM.RefreshCache();
objSearchADAM = new DirectorySearcher(objADAM);
objSearchADAM.Filter = "(&(objectClass=group))";
objSearchADAM.SearchScope = SearchScope.Subtree;
objSearchResults = objSearchADAM.FindAll();
// Enumerate groups
try
{
fileGroups.AutoFlush = true;
if (objSearchResults.Count != 0)
{
foreach (SearchResult objResult in objSearchResults)
{
myResult = objResult;
objGroupEntry = objResult.GetDirectoryEntry();
Console.WriteLine(objGroupEntry.Name);
fileGroups.WriteLine(objGroupEntry.Name.Substring(3));
}
}
else
{
throw new Exception("No …
Run Code Online (Sandbox Code Playgroud) 我已经使用WAMP安装了很长一段时间,现在启用了LDAP,一切顺利.现在虽然我必须设置另一台机器,但出于某种原因我无法启用LDAP.
我检查了输出,phpinfo()
并且LDAP部分不存在.我编辑php.ini
取消注释该行:
extension = php_ldap.dll
Run Code Online (Sandbox Code Playgroud)
我还检查了搜索扩展名的文件路径,文件php_ldap.dll
位于正确的位置.
我很肯定我正在编辑正确的php.ini
文件,因为我检查了显示的文件路径phpinfo()
,并且我能够成功启用/禁用其他扩展.
每次更改后我都重新启动了Apache.
谷歌搜索这个,我发现的唯一解决方案是上面的那些,加上一两个提到编辑Windows PATH
变量以包括路径php.ini
?虽然它对我没有意义(我已经知道php.ini
正在被解析)但尝试过它.我还在另一台机器上检查了我以前的安装,从我可以看到的,我从未PATH
在该机器上添加任何PHP目录
弗兰克在下面的回答让我得到了解决方案,所以我想我现在要巩固一切.
在WAMP服务器上启用LDAP支持:
extension = php_ldap.dll
中php.ini
php.ini
通过检查输出,确保您正在编辑右侧phpinfo()
php.ini
文件以查找扩展目录的位置php_ldap.dll
该目录中的位置libeay32.dll
,并ssleay32.dll
和其目录添加到Windows PATHphpinfo()
我搜索过这个主题,但我找到的只是过滤器,它返回不存在某个属性的条目,例如:
(!(manager=*))
Run Code Online (Sandbox Code Playgroud)
但是,我想查找属性存在的条目,但是具有空值(即空/空字符串).我可以使用LDAP过滤器执行此操作吗?如果是,如何执行此操作?
编辑:
只是为了确认,上面的过滤器找到没有属性的条目,但没有找到属性为空的条目(空字符串).
这取决于LDAP实现还是什么?