这是一篇很好的文章,但我不确定我应该将我与 ldap 的连接和绑定(我的哪些页面)放在哪里?如何确保身份验证也适用于子页面或将来创建的任何其他页面?
您现在正在向您的应用程序添加状态。您最初可能会考虑在 tomcat 中实现您的身份验证 (authn) 和授权 (authz),而不是在您的应用程序中。
如果您决定不在 tomcat 中实现,而选择在 perl 中实现,那么您刚刚决定为您的应用程序添加状态,这意味着您需要添加某种会话处理。看看 CGI::Session,CPAN 上还有很多其他的会话处理模块。避免使用 Apache::Session。如果事务运行时间长,它的锁处理可能会导致很多痛苦。在 cookie 中使用会话密钥。通过 SSL 发送所有内容。如果您不使用 SSL,那么破解者可以拦截您的会话密钥,然后劫持会话。
设置好会话基础结构后,您需要创建登录机制,通常是带有用户名和密码的表单。当提交该表单时,其背后的 CGI 会对密码进行魔术加密,然后执行 LDAP 舞蹈:
- 连接到目录服务器是没有连接已经存在。
2a. 匿名或作为应用用户绑定到服务器,通过CN搜索用户,使用DN和密码绑定为用户
或者
2b。从用户名计算 DN,与 DN 和加密的密码绑定。
通常,第 3 步是检查用户记录中的某些授权指示符,它可能是是/否访问指示符,或者它可能是角色或权限列表。
如果用户成功通过身份验证和授权,则将一些授权信息写入用户的会话。
然后,您的应用程序的每个后续页面都将检查用户是否已登录和/或是否具有使用该页面的适当授权。如果未经授权,您可以将他们发送回登录后登录页面,如果他们未登录,则可以将其发送回登录页面。
Basically, you just replacing the usual "query the user table of the database" with a query to an LDAP to a directory server.