我有一个域名,可由一小群私人访问。所以我想通过身份验证来控制访问。
域中安装了一组应用程序,每个应用程序都有自己的子域。例如:domain.com,app1.domain.com,app2.domain.com,app3.domain.com
我希望拥有一个单点登录解决方案,这样他们就无需为每个应用程序验证自己。此外,应用程序使用不同的语言(PHP,Python和Perl)编写,因此通过Apache模块对用户进行身份验证是理想的。
我是消化身份验证的新手,但它似乎是一个很好的解决方案。我使用htdigest
来创建我的用户。我已经配置了我的域和子域(见下文)。
如果我转到域或任何子域,它将提示输入用户名和密码。如果我输入正确的用户名和密码,它将验证我的身份并加载页面。但是,如果我转到另一个子域,它会要求我再次输入用户名和密码。如果我输入相同的用户名和密码,它将起作用。
所以密码文件没问题,验证也没问题,但问题似乎在于AuthDigestDomain
的配置。
我在网上搜索了一个在多个域上使用摘要式身份验证的示例,但我找不到解决我问题的具体示例。
我希望有人可以提供帮助。我是否在每个Directory
中添加相同的身份验证信息?我应该使用Directory
或Location
还是Files
?我是否一起错过了什么?
提前致谢!
以下是我对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编写身份验证标头,以确保请求/响应质询是正确的。这根本没有帮助!
答案 0 :(得分:3)
大多数浏览器不尊重摘要“域”指令,也不会重新发送其他URI的凭据。据我所知,Opera是唯一一个尊重它的浏览器。
对于Opera,服务器必须为域列表中的每个URI使用相同的“realm”字符串进行响应。换句话说,如果domain =“/ test / example”,服务器需要在两个URI的WWW-Authenticate标头中发送“Test Realm - example.com”。我认为Opera这样做是因为它存储了H(A1)而不是实际的安全密码。有关详细信息,请阅读RFC2617。
以下是我对此问题的跨浏览器解决方案:http://travisce.com/arest/
答案 1 :(得分:0)
我自己没有这样的经历。但我刚看了Apache documentation并发现了这个:
AuthDigestNonceLifetime指令 控制服务器随机数的长度 有效。 [...]如果秒小于0 然后nonce永不过期。
所以在我看来,0秒(你正在使用的值)是非法的,或者真的告诉Apache在0秒后使nonce失效,这将准确地解释你正在进行的行为。
答案 2 :(得分:0)
AuthDigestDomain上的通配符可以帮助吗?
*.domain.com