我有一个域将由一小群私人访问。所以我想通过身份验证来控制访问。
该域安装了一组应用程序,每个应用程序都有自己的子域。例如:domain.com、app1.domain.com、app2.domain.com、app3.domain.com
我希望有一个单点登录解决方案,这样他们就不必为每个应用程序验证自己。此外,应用程序是用不同的语言(PHP、Python 和 Perl)编写的,因此通过 Apache 模块对用户进行身份验证是理想的选择。
我是消化身份验证的新手,但这似乎是一个很好的解决方案。我曾经htdigest
创建我的用户。我已经配置了我的域和子域(见下文)。
如果我转到域或任何子域,它将提示输入用户名和密码。如果我输入正确的用户名和密码,它将对我进行身份验证并加载页面。但是,如果我转到另一个子域,它会要求我再次输入用户名和密码。如果我输入相同的用户名和密码,它将起作用。
所以密码文件没问题,认证也没问题,但问题似乎出在AuthDigestDomain
.
我在网上搜索了一个在多个域上使用摘要身份验证的示例,但我找不到解决我的问题的具体示例。
我希望这里有人可以提供帮助。我是否将相同的身份验证信息放入每个Directory
? 我应该使用Directory
or Location
orFiles
吗?我错过了什么吗?
提前致谢!
下面是我的 domain.com 的 Apache 配置示例:
<Directory /var/www>
AuthType Digest
AuthName "realm"
AuthDigestAlgorithm MD5
AuthDigestDomain / http://domain.com/ http://app1.domain.com/ http://app2.domain.com/ http://app3.domain.com/
AuthDigestNcCheck Off
AuthDigestNonceLifetime 0
AuthDigestQop auth
AuthDigestProvider file
AuthUserFile /etc/apache2/.htpasswd-digest
AuthGroupFile /dev/null
Require valid-user
</Directory>
以下是 app1.domain.com 的示例:
<Directory /var/lib/app1>
AuthType Digest
AuthName "realm"
AuthDigestAlgorithm MD5
AuthDigestDomain / http://domain.com/ http://app1.domain.com/ http://app2.domain.com/ http://app3.domain.com/
AuthDigestNcCheck Off
AuthDigestNonceLifetime 0
AuthDigestQop auth
AuthDigestProvider file
AuthUserFile /etc/apache2/.htpasswd-digest
AuthGroupFile /dev/null
Require valid-user
</Directory>
更令人困惑的是,这在使用 IE6 时有效,但不适用于 Firefox 或 Chrome。是客户端没有正确发送身份验证,还是服务器没有发送正确的凭据?
我也一直在阅读RFC 2617并使用 PHP 编写身份验证标头以确保请求/响应质询是正确的。这根本没有帮助!