5

我有一个域将由一小群私人访问。所以我想通过身份验证来控制访问。

该域安装了一组应用程序,每个应用程序都有自己的子域。例如:domain.com、app1.domain.com、app2.domain.com、app3.domain.com

我希望有一个单点登录解决方案,这样他们就不必为每个应用程序验证自己。此外,应用程序是用不同的语言(PHP、Python 和 Perl)编写的,因此通过 Apache 模块对用户进行身份验证是理想的选择。

我是消化身份验证的新手,但这似乎是一个很好的解决方案。我曾经htdigest创建我的用户。我已经配置了我的域和子域(见下文)。

如果我转到域或任何子域,它将提示输入用户名和密码。如果我输入正确的用户名和密码,它将对我进行身份验证并加载页面。但是,如果我转到另一个子域,它会要求我再次输入用户名和密码。如果我输入相同的用户名和密码,它将起作用。

所以密码文件没问题,认证也没问题,但问题似乎出在AuthDigestDomain.

我在网上搜索了一个在多个域上使用摘要身份验证的示例,但我找不到解决我的问题的具体示例。

我希望这里有人可以提供帮助。我是否将相同的身份验证信息放入每个Directory? 我应该使用Directoryor LocationorFiles吗?我错过了什么吗?

提前致谢!

下面是我的 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 编写身份验证标头以确保请求/响应质询是正确的。这根本没有帮助!

4

3 回答 3

4

大多数浏览器不尊重 Digest “域”指令,并且不会重新发送其他 URI 的凭据。据我所知,Opera 是唯一支持它的浏览器。

对于 Opera,服务器必须对域列表中的每个 URI 使用相同的“领域”字符串进行响应。换句话说,如果 domain="/test /example",服务器需要在这两个 URI 的 WWW-Authenticate 标头中发送“Test Realm - example.com”。我认为 Opera 这样做是因为它存储 H(A1) 而不是实际密码以确保安全。阅读 RFC2617 了解更多信息。

这是我对这个问题的跨浏览器解决方案:http: //travisce.com/arest/

于 2009-12-30T04:13:58.613 回答
0

我自己没有这样的经验。但我只是看了一下Apache 文档,发现了这个:

AuthDigestNonceLifetime 指令控制服务器随机数的有效时间。[...] 如果秒小于 0,则随机数永不过期。

所以在我看来,0 秒(您正在使用的值)要么是非法的,要么是真的告诉 Apache 在 0 秒后使 nonce 过期,这将准确地解释你得到的行为。

于 2008-12-13T12:56:33.073 回答
0

AuthDigestDomain 上的通配符有帮助吗?

    *.domain.com
于 2009-06-22T07:14:20.517 回答