2009-02-19 183 views
5

我对在基于Java的Web应用程序中使用LDAP身份验证的最佳实践感兴趣。在我的应用程序中,我不想存储用户名\密码,只有一些ID。但是如果LDAP目录中存在任何信息,我想检索附加信息(名称,姓氏)。LDAP最佳实践

回答

6

我的团队使用LDAP作为标准认证方式。基本上,我们将LDAP视为任何其他数据库。

要将用户添加到应用程序,您必须从LDAP中选择一个或在LDAP中创建它;当用户从应用程序中删除时,它保留在LDAP中,但无法访问应用程序。

您基本上只需要在本地存储LDAP用户名。您可以每次从LDAP读取LDAP数据(电子邮件,部门等),或者以某种方式从应用程序中读取LDAP数据(尽管从LDAP读取数据可能更简单,更智能,因为LDAP数据可能会更改。当然,如果您需要广泛报告或使用LDAP数据,您可能需要从LDAP中手动或通过批处理任务进行提取。

好的一点是,一旦用户在LDAP中被禁用,它将一次在所有应用程序中被禁用;另外,用户在所有应用程序中都具有相同的凭据在企业环境中,通过一系列内部应用程序,这是一大优势。不要仅为一个应用程序的用户使用LDAP;在这种情况下没有真正的好处。

1

如果您有多个基于Web的应用程序并希望使用LDAP身份验证,那么预先打包的单点登录解决方案可能会比创建您自己的LDAP身份验证更好。 CAS支持LDAP身份验证,并可以撤回您的应用程序所需的数据。

在我的大学里,我们实际上已经实施CAS作为对抗Active Directory服务器的单一标志。我们还利用CAS来验证我们的J2EE应用程序,并正在使用CAS来验证我们的PHP应用程序。

我们使用AD来保存域的用户。有一些基于用户类型的OU。每个用户都有一个唯一的ID,恰好是他们的学生/员工ID,因此应用程序可以将其用作其数据库中的主键。我们为PHP应用程序提供了数据库驱动的授权方法。 J2EE应用程序的授权来​​自LDAP中的值。

祝您的应用程序顺利。

0

那么,您希望用户只输入ID,然后从LDAP中获取其他信息?这很容易。

  1. 创建LdapInitial上下文和连接到LDAP
  2. 执行搜索的ID(它应被存储为一些属性值) - 例如(&(用户ID =约翰)(objectClass的=用户)) - 这意味着 “用户ID =约翰和对象类=用户”
  3. 信息搜索结果对象将包含所有属性(或者你问的那些)

一些LDAP实现(着名的MS ActiveDirectory LDAP)不允许您与匿名用户连接。对于那些你需要有一个技术用户名/密码来连接。

如上所述,当您有很多应用程序时,LDAP通常是有意义的。

P.S.感受一下LDAP是如何尝试Apache Directory Studio的。

+0

不太如此!在我的应用程序数据库中,我希望仅存储来自LDAP的id和相关的DN。如果我需要关于用户的其他信息,我可以使用DN – 2009-02-21 11:01:55

+0

从目录中得到它,尽管它是重复的。但是你真的在问什么? – 2009-02-22 13:37:57