【问题标题】:Java Tomcat LDAP authenticationJava Tomcat LDAP 身份验证
【发布时间】:2012-06-27 05:39:09
【问题描述】:

由于我使用 Tomcat6 作为 servlet 容器运行 Java,我发现使用 Tomcat JNDIRealm feature 是合适的,这样 LDAP 用户无需任何额外的努力就可以登录到我的站点。我使用的 LDAP 服务器是OpenLDAP on Ubuntu

除此之外,我的登录页面使用form-based authentication 而不是https connection

我发现了两个非常好的通过 LDAP 验证用户的示例,herehere,它们都实现了我觉得我几乎实现的目标。为什么几乎实现了?

当我尝试使用错误的凭据登录时,我会适当地发送到<form-error-page>,就我而言是login-failed.html

当我的凭据良好且身份验证成功时,我开始在站点中获得 403 for all urls。除非我重新启动 Tomcat,否则我无法删除 403 错误(即使是登录页面!)。

我怀疑原因是因为我没有正确设置领域中的roles 或其他配置文件。为简洁起见,我将相关配置文件摘录放在pastebin

请注意,基于 Tomcat 的身份验证可以完美运行,因为该角色很容易附加到 tomcat-users.xml 中的用户。因此,我认为一旦成功通过身份验证,从 LDAP 获取经过身份验证的用户的角色是一个问题。

TL/DR

我在将 Tomcat 连接到 LDAP 身份验证时遇到配置问题。正确获取了用户数据,但未正确获取用户的角色。可根据要求提供 LDAP 日志消息;)

更新:我粘贴了 LDAP 数据 here

【问题讨论】:

  • 您有群组 cn=site-users,ou=groups,dc=mydomain,dc=com 和该群组中的用户吗?
  • 请提供更多有关您的 ldap 结构的信息
  • @MaVRoSCy 基本 LDAP 结构 here。因此我有cn=site-users,ou=groups,dc=mydomain,dc=com。请注意,site-users 有许多 member 属性指向用户。
  • 谜题中还缺少其他东西......只是无法弄清楚是什么。我看到你的代码应该可以工作
  • @MaVRoSCy 请参阅下面我对用户 EJP 的最后评论。感谢您的帮助,会通知您。

标签: java tomcat ldap tomcat6 openldap


【解决方案1】:

没错。 JNDIRealm 找不到您的 LDAP 角色。您需要在 Tomcat 之外测试您的角色搜索字符串,以确保它产生您认为应该产生的结果。由于您尚未提供任何 LDAP 详细信息,因此无法进一步评论。

使用 /* 在整个站点上设置安全权限是错误的。您需要排除登录页面,可能还有首页和忘记密码页面,也许更多,需要角色。

【讨论】:

  • LDAP 详细信息here。请注意,site-users 有许多 member 属性指向用户。
  • @Josvic 'site-users' 我看不到任何“成员”属性。您似乎在 LDAP 组中有“uid”,但您告诉 LDAP 搜索“成员”。
  • 我在objectClass 组织单元people 下有许多uid 的用户。它们是groupOfNames objectClass site-users成员。有问题吗?所以应该对用户进行身份验证。但用户与角色 site-users 不匹配。
  • @JosvicZammit 问题是我仍然不知道“成员”属性中的内容,因为您还没有透露。要使用该搜索字符串,它需要是一个完整的 DN。用户经过身份验证,他只是没有被授权。
  • 没错。我需要写入权限才能更改它;我现在不能修改它。但会让你知道,因为我认为member 属性的地址不正确。如果这是问题,会将您的答案标记为正确。谢谢。
猜你喜欢
  • 1970-01-01
  • 2017-07-30
  • 1970-01-01
  • 2016-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-01
  • 2014-06-26
相关资源
最近更新 更多