apache2 auth_basic dbd 密码不匹配

问题描述 投票:0回答:1

我已经设置了一个 Apache2 服务器作为反向代理,它从我的网络中的虚拟机检索多个服务。我正在尝试设置基本身份验证以限制某些用户的某些服务,使用 mysql 数据库来存储用户和密码。

我确信 Apache2 正在连接到数据库,并在我尝试使用 http 身份验证登录时检索适当的用户名,因为我检查了 mysql 日志:

2017-12-12T16:14:20.338976Z 2542 准备从 testTable 中选择密码,其中用户名=?

2017-12-12T16:14:29.611520Z 2531 执行 SELECT 密码 FROM testTable WHERE username='testuser'

但是,我的身份验证总是因密码不匹配而被拒绝。

[2017 年 12 月 12 日星期二 10:14:29.612762] [auth_basic:error] [pid 2729] [客户端 192.168.1.194:56047] AH01617:用户 testuser:“/protected”身份验证失败:密码不匹配,引荐来源:http: //192.168.1.217/landPage.php

<Location "/protected">
    AuthName "Authentication"
    AuthType Basic
    AuthBasicProvider dbd
    Require valid-user
    AuthDBDUserPWQuery "SELECT password FROM testTable WHERE username=%s"
</Location>
mysql basic-authentication apache2.4
1个回答
0
投票

为时已晚,但可能会对某人有所帮助。我在 Ubuntu 上使用

sqlite3
时遇到了同样的问题。首先确保您的密码在 Ubuntu 上按照此编码 https://httpd.apache.org/docs/2.4/misc/password_cryptions.html

我首先使用此 Apache 页面提供的 Python 代码对我的密码进行 SHA1 编码https://httpd.apache.org/docs/2.4/misc/password_cryptions.html我在 Ubuntu 终端执行此操作并收到了此信息

>>> "{SHA}" + format(base64.b64encode(hashlib.sha1('1234567'.encode('utf-8')).digest()));
Result "{SHA}b'IOq+XWSw4hZ5boNPUtYf0LcDMvw='"

然后,我使用 Apache httpd pack 中的

htpasswd
SHA1 编码相同的字符串。它给出了几乎相同的结果

/usr/local/apache2/bin$ ./htpasswd -nbs testuser 1234567
testuser:{SHA}IOq+XWSw4hZ5boNPUtYf0LcDMvw=

你看到区别了吗?来自终端的 Python 结果前面加上单引号,b 后面加上单引号。所以在Python中删除它或者使用

htpasswd

© www.soinside.com 2019 - 2024. All rights reserved.