5 apache authentication subdomain digest single-sign-on
我有一个域,可供一小群私人访问。所以我想通过身份验证控制访问。
该域安装了一组应用程序,每个应用程序都有自己的子域。例如: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>
Run Code Online (Sandbox Code Playgroud)
这是 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>
Run Code Online (Sandbox Code Playgroud)
更令人困惑的是,这在使用 IE6 时有效,但不适用于 Firefox 或 Chrome。是客户端没有正确发送身份验证,还是服务器没有发送正确的凭据?
我还一直在阅读RFC 2617并使用 PHP 编写身份验证标头以确保请求/响应质询是正确的。这根本没有帮助!
大多数浏览器不遵守摘要“域”指令,并且不会重新发送其他 URI 的凭据。据我所知,Opera 是唯一支持它的浏览器。
对于 Opera,服务器必须对域列表中的每个 URI 使用相同的“领域”字符串进行响应。换句话说,如果domain="/test /example",则服务器需要在这两个 URI 的 WWW-Authenticate 标头中发送“Test Realm - example.com”。我认为 Opera 这样做是因为为了安全起见,它存储 H(A1) 而不是实际密码。阅读 RFC2617 了解更多相关信息。
这是我针对此问题的跨浏览器解决方案:http://travisce.com/arest/
| 归档时间: |
|
| 查看次数: |
23848 次 |
| 最近记录: |