Apache HTTP Basic Auth - 提供用户名和密码后出现 401 错误

Posted

技术标签:

【中文标题】Apache HTTP Basic Auth - 提供用户名和密码后出现 401 错误【英文标题】:Apache HTTP Basic Auth - 401 error after supplying username and password 【发布时间】:2012-12-23 01:17:03 【问题描述】:

我正在尝试使用 Apache Http 配置我的亚马逊服务器,以便在通过浏览器访问域时提示用户输入用户名/密码。

这是我的 app.conf 文件中的一个 sn-p(包含在 httpd.conf 中)

Alias / "/opt/bitnami/apache2/htdocs"

<Directory "/opt/bitnami/apache2/htdocs">
  AuthType Basic
  AuthName "No Trespassing"
  AuthUserFile "/opt/bitnami/apache2/users"
  Require valid-user

<IfVersion < 2.3 >
  Order allow,deny
  Allow from all
  Satisfy all
</IfVersion>
<IfVersion >= 2.3>
  Require all granted
</IfVersion>
  ErrorDocument 403 "Authentication error"
</Directory>

登录后,我被重定向到 401“授权错误”页面。这里有什么理由吗?我在想也许我的其他 .conf 文件会引起一些冲突。

在 httpd.conf 我有以下内容:

WSGIScriptAlias / /opt/bitnami/apps/django/scripts/djangoApp.wsgi
<Directory '/opt/bitnami/apps/django/django_projects/djangoApp'>
  Order allow,deny
  Allow from all
  Satisfy all
</Directory>

每个 sn-ps 的第一行是否会在此处引起冲突,从而阻止我登录?我不确定,但他们看起来都在创建类似的别名。

如果我需要提供更多详细信息,请告诉我。

这是日志中的错误:

[Wed Jan 09 03:49:49 2013] [error] [client X.X.X.X] client denied by server configuration: /opt/bitnami/apache2/htdocsindex.html
[Wed Jan 09 03:49:49 2013] [error] [client X.X.X.X] client denied by server configuration: /opt/bitnami/apache2/htdocsfavicon.ico
[Wed Jan 09 03:50:28 2013] [error] [client X.X.X.X] client denied by server configuration: /opt/bitnami/apache2/htdocsindex.html
[Wed Jan 09 03:50:28 2013] [error] [client X.X.X.X] client denied by server configuration: /opt/bitnami/apache2/htdocsfavicon.ico
[Wed Jan 09 03:50:28 2013] [error] [client X.X.X.X] client denied by server configuration: /opt/bitnami/apache2/htdocsfavicon.ico

【问题讨论】:

ls -l /opt/bitnami/apache2/users; apache 守护进程的默认用户是 ubuntu 中的 www-data。 www-data 可以读取密码文件吗? -rw-r--r-- 1 root root 49 Jan 9 02:50 users 组应该有r+w权限吗? 由于文件为root所有且www-data不在root组中,组权限无效。可以肯定的是,su - www-data -c "cat /opt/bitnami/apache2/users" - 没有错误,你没事。 它要求输入密码,不确定要输入哪个密码...我试了一堆 【参考方案1】:

我会尝试一些改变。

首先,您的第一个 Alias / "/opt/bitnami/apache2/htdocs" 很容易被 DocumentRoot /opt/bitnami/apache2/htdocs 指令替换。

那么你有几个别名,都用于“/”。而不是像 Alias 和 AliasMap 这样的 url-filesystem 映射指令,我会简单地使用 Location 指令进行安全设置。

<Location />
  (... Auth basic stuff)
<Location>

通过使用 Location,您可以处理 url 而不是文件系统映射。

【讨论】:

这里的问题是,在用户通过身份验证之前,我希望所有 url 都无法访问...... Location 指令是否使用 Location * 之类的东西来处理这个问题? 是的位置 / 表示 / 下的所有位置。请参阅httpd.apache.org/docs/2.2/fr/mod/core.html#location,位置在目录和文件之后处理,位置作为路径前缀应用。而/是所有路径的路径前缀。 使用位置身份验证后似乎工作得更好一些,但我仍然被带到一个错误页面(内部服务器错误页面)。【参考方案2】:

我认为你的问题是两件事之一:

潜在解决方案#1

只是运行 Apache 的用户无权访问 /opt/bitnami/apache2/htdocs 目录。

有关处理“客户端被服务器配置错误拒绝”的更多详细信息,请参阅此页面:http://wiki.apache.org/httpd/ClientDeniedByServerConfiguration

查看/opt/bitnami 目录树上设置了哪些用户/组。确保它们对 Apache 用户友好。

潜在解决方案#2

此外,如果您查看错误消息,则路径在 htdocs 之后缺少“/”。查看路径:

/opt/bitnami/apache2/htdocsindex.html
/opt/bitnami/apache2/htdocsfavicon.ico

我认为您需要在 Alias 行中添加一个斜杠“/”,如下所示:

Alias / "/opt/bitnami/apache2/htdocs/"

【讨论】:

解决方案 #2 似乎有帮助,身份验证有效,但在登录完成后将我重定向到另一个页面。我想我会为此感谢你,因为它确实帮助我更接近我正在寻找的最终解决方案。

以上是关于Apache HTTP Basic Auth - 提供用户名和密码后出现 401 错误的主要内容,如果未能解决你的问题,请参考以下文章

HttpClient处理Basic认证CODE

CentOS 7 Apache:启用Basic Auth+pam

关于java 应用 对于apache http srever 的Authorization Basic 认证问题

HTTP 基本认证(basic auth)和摘要认证(digest auth)区别

HTTP 基本认证(basic auth)和摘要认证(digest auth)区别

nginx认证模块ngx_http_auth_basic_module