我想限制对 Apache 提供的某些目录的访问。我希望客户端必须输入用户名和密码,但我希望 Apache 接收该用户输入的用户名和密码,并将它们作为参数传递给我编写的用于进行身份验证的 Python 脚本。然后,根据所述脚本的输出,我希望 Apache 允许或拒绝访问。这可能吗?
答案1
我知道的唯一方法是使用mod_auth_external
或mod_python
。前者允许您实现自定义身份验证系统;后者为 Apache 提供了一个嵌入式 Python 解释器,可用于编写自定义身份验证脚本. 既不是标准模块,也不是非常流行的模块。
然而...
最简单的方法是让您的身份验证系统更新 Apache 使用的密码列表。Apache 附带了您需要的所有工具,可以从 .htpasswd 或 .htdigest 文件添加/更新/删除用户(将htpasswd
或htdigest
命令挂接到任何用户管理系统中应该很简单)。
或者,您可以让mod_auth
(Apache 的默认身份验证系统)通过以下模块从数据库读取数据:
mod_auth_dbm
- 一个标准模块,允许您使用dbm 系列前关系型数据库mod_auth_mysql
- 允许您使用 MySQL 数据库的第三方模块- 您还可以使用 PostgreSQL 和其他 SQL 数据库
mod_dbd
和mod_authn_dbd
。
我个人会选择这条路线,因为它比在单独的文本文件中复制用户密码哈希值(希望您没有存储密码本身)更优雅,而且创建一个新的身份验证系统似乎是重新发明轮子。
答案2
您可以使用.htaccess 来限制对某些目录的访问。
http://www.elated.com/articles/password-protecting-your-pages-with-htaccess/
您需要创建一个 htpasswd 文件,该文件可以从 .htaccess 文件中引用
http://www.htaccesstools.com/htpasswd-generator/
Python:似乎有一个可以处理 htpasswd 文件的库:
http://pacopablo.com/wiki/pacopablo/blog/htpasswd-with-python
有关 python 和 htpasswd 的更多信息:
http://packages.python.org/passlib/lib/passlib.apache.html
我不熟悉 Python,无法为您提供完整的解决方案。不过我认为这是可能的,而且如果您熟悉 Python,只需进行一点 Google 搜索,可能就不会太复杂。