3

我正在尝试为我的 .Net 应用程序构建一个功能,以便能够与 LDAP 服务器对话以读取用户属性并验证用户身份。我已经使用 OpenDS 设置了一个测试目录服务器,添加了自定义属性和对象,并添加了具有新对象类型的用户。一切正常,直到我尝试读取自定义属性值,我得到:

{"Unknown error (0x8000500c)"}
at System.DirectoryServices.PropertyValueCollection.PopulateList()
at System.DirectoryServices.PropertyValueCollection..ctor(DirectoryEntry entry, String propertyName)
at System.DirectoryServices.PropertyCollection.get_Item(String propertyName)

我已经尝试过这篇文章(使用格式正确的 oid)以及这篇文章(在您的 ldap 路径中使用完全限定的域名 - 我使用的是 LDAP://mymachine.company.local/... 之类的东西)中的建议。其他人建议,由于 COM 错误代码意味着 E_ADS_CANT_CONVERT_DATATYPE 我的属性或架构有问题,但属性设置为 DirectoryString,我可以读取其他相同类型的默认字段。

我知道使用 OpenDS 与 Active Directory 的工作方式不同,我有一个单独的 AD 模块可以正常工作,我只是想知道是否有人有与 OpenDS 或 Sun One LDAP 实现交谈的经验。

想法?我在谷歌上找不到太多同时处理 OpenDS 和 .NET 的内容,这让我觉得我应该做点别的事情。正如我所说的,AD 的东西工作得很好,但是我真的很想用 OpenDS 也能做到这一点。

谢谢!

生锈的

4

2 回答 2

0

使用已知的良好工具,例如ldapsearch验证 LDAP 客户端确实可以请求和接收所需的条目和属性。例如:

ldapsearch --hostname hostname \
           --port port \
           --bindDn your-auth-id \
           --bindPassword credentials-for-your-auth-id \
           --useSSL     \
           --trustAll \
           --baseDn your-base-object \
           --searchScope the-scope-you-use \
           '(&)' \
           your-custom-attribute-names

使用与 LDAP 客户端代码中相同的参数。如果上述搜索成功,则服务器配置正确,条目存在,并且 auth ID 有权检索这些条目和自定义属性。否则,它们可能是 LDAP 客户端代码中的问题。

也可以看看

于 2012-06-12T17:45:44.063 回答
0

我在尝试从 linux OpenLdap 数据库中读取多值字符串时遇到此错误。

这似乎是一个错误,因为我发现错误发生在 XP 和 Server 2003 上,但 Windows 7 和 Server 2008 上的相同代码会返回这些值,而不管安装的 .NET 版本如何。

但是,我找到了使用更直接访问的 C# 解决方法。除了 Directory.Services,您还需要添加引用 COM,“Active DS 类型库”。

var dirEntry = new DirectoryEntry("ldapDn", "logonDn", "logonPass");
var nativeEntry = (ActiveDs.IADsPropertyList)dirEntry.NativeObject;
var propEntry = (ActiveDs.IADsPropertyEntry)nativeEntry.GetPropertyItem("attributeName", 3);
foreach (ActiveDs.IADsPropertyValue propValue in (object[])propEntry.Values)
{
    Debug.Print(propValue.CaseIgnoreString);
}

这是为了我自己的简单需求而放在一起的,这里是用作参考的完整辅助类以及AdsType Enums

于 2012-08-22T17:08:27.847 回答