由于我使用 Tomcat6 作为 servlet 容器运行 Java,我发现使用Tomcat JNDIRealm 功能是合适的,这样 LDAP 用户无需任何额外的努力就可以登录到我的站点。我使用的 LDAP 服务器是Ubuntu 上的 OpenLDAP。
最重要的是,我的登录页面使用基于表单的身份验证通过https 连接。
我发现了两个非常好的通过 LDAP 进行身份验证的用户示例,here和here,它们都实现了我觉得我几乎实现的目标。为什么几乎达到了?
当我尝试使用错误的凭据登录时,我会适当地发送到<form-error-page>
,login-failed.html
就我而言。
当我的凭据良好并且我成功进行身份验证时,我开始为站点中的所有 url 获取 403 。除非我重新启动 Tomcat,否则我无法删除 403 错误(即使是登录页面!)。
我怀疑原因是因为我没有roles
正确设置领域或其他配置文件。为简洁起见,我将相关配置文件摘录放在pastebin上:
请注意,基于 Tomcat 的身份验证可以完美运行,因为该角色很容易附加到tomcat-users.xml
. 因此,我认为一旦成功通过身份验证,从 LDAP 获取经过身份验证的用户的角色是一个问题。
TL/DR
我在将 Tomcat 连接到 LDAP 身份验证时遇到配置问题。正确获取了用户数据,但未正确获取用户的角色。可根据要求提供 LDAP 日志消息;)
更新:我在这里粘贴了 LDAP 数据。