我使用了一个闭源应用程序,它可以配置为使用 LDAP 目录来获取用户的组成员资格。LDAP查询可以随意配置。现在我需要集成来自提供 API 的应用程序的各种资源。
我可以做到这一点(伪代码)
String[] getGroupmembershipsFromAll( String username ) {
String[] groups = new String[];
groups.add( ApiForAppOne.getUserGroups( username ) );
groups.add( ApiForAppTwo.getUserGroups( username ) );
groups.add( ApiForAppThree.getUserGroups( username ) );
return groups;
}
我的想法是通过实现 LDAP RFC 的“东西”来公开这个功能。最后一步是使用 servername:389 和以下查询配置应用程序:
(username='username@domain')
(所有来源用来识别用户的通用标准是用户@域形式的 Windows AD 主体)
你知道实现这一目标的方法吗?实施 RFC4511 可能是解决方案,但我不想从头开始,因为 RFC 很长。也许基于 OpenDS/OpenDJ 或 ApacheDS 构建一些东西是一个可行的解决方案,但我不知道它们是在设计时考虑到这一点的。另一方面,一个优雅的解决方案可能是将 API 结果保存在 LDAP 中,但我不知道是否必须再次使用 JPA 检索这些数据,或者使用 LDAP 查询检索它是否有效。我读了一些关于 uboundid LDAP 服务器 SDK 的内容,也许这是另一种选择。
所有这些都只是想法,我在这方面没有经验。想法非常感谢。
非常感谢您提供这些信息。我查看了 unboundid sdk 和启动 ldap 服务器并导入 ldif 的示例。但是你关于生产性使用的评论让我觉得我可能会考虑一个不同的解决方案,尽管当我需要编写 jndi 或 ldap 单元测试时我肯定会回到 unboundid 。
我现在能够更好地描述我的需求,也许这可以通过 unboundid 来实现,或者你知道另一个让我实现这一目标的解决方案。我需要拦截查询,然后调用 API(参见上面的示例)以检索数据,然后将其提供给底层 ldap 目录。也许 unboundid 提供了一个接口。你知道吗?或者更多关于 ApacheDS 的设计?这种拦截的原因是我可以查询的应用程序包含大约 100000 个条目,我只想将这些复制到需要的 ldap。
在写这篇文章时,我看到了另一种选择:也许可以做一些 aop 来拦截呼叫。你怎么看 ?