我正在使用Slim v 3和JWT编写REST API。我跟着https://github.com/tuupola/slim-jwt-auth,它运行正常。
每次用户登录appl时,我都会生成一个令牌。为了对用户进行身份验证,我按照https://github.com/tuupola/slim-basic-auth使用auth中间件。成功后,我使用https://github.com/firebase/php-jwt生成令牌。
我在这里搜索了一个相关问题,JWT: Authentication in slim v3 and Android我对http basic auth进行了查询。 (我没有足够的代表在那里发表评论)。
现在我的问题:
通过'用户' HttpBasicAuthentication选项工作正常,但我无法明显地使用它对我的用户表。许多用户将登录该应用程序并在“用户”中列出所有这些应用程序。不是一种选择。我在这儿吗?
如果是,我必须使用Pdo身份验证器。我配置它但身份验证失败,我无法解决它。错误回调是用"身份验证失败"信息。我的数据库有'用户'表'用户'并且'哈希'用户名和密码的列。以下是我正在使用的代码。
use Slim\Middleware\HttpBasicAuthentication; use Slim\Middleware\HttpBasicAuthentication\PdoAuthenticator;
$pdo = new \PDO('mysql:host=localhost;dbname=test', $dbUser, $dbPassword);
$middlewareHttpBasicAuthConfig = [
/*"users" => [
"user1" => "password"
],*/
"secure" => false,
"relaxed" => ["localhost", "amruta-pani"],
"path" => "/*",
"passthrough" => Utils::httpAuthPassThroughRoutes,
"realm" => "Protected",
"authenticator" => new PdoAuthenticator([
"pdo" => $pdo
]),
"callback" => function($request, $response, $arguments) {
echo "Through<br>\n";
print_r($arguments);
},
"error" => function($request, $response, $arguments) {
echo "Failed<br>\n";
print_r($arguments);
}
];
$app->add(new HttpBasicAuthentication($middlewareHttpBasicAuthConfig));
我正在使用Google Advanced Rest Client进行测试,我看到的输出是
Failed<br>
Array
(
[message] => Authentication failed
)
我已将以下规则添加到我的Apache网络服务器
RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
我在这里缺少什么?
答案 0 :(得分:1)
您似乎需要按照blog post中的说明将数据库命名方案传递给PdoAuthenticator。
在你的情况下,这将是......
"authenticator" => new PdoAuthenticator([
"pdo" => $pdo,
"table" => "users",
"user" => "user",
"hash" => "hash"
])
......这似乎确实是默认值。由于简单的底层PDO连接问题,它可能无法正常工作。此外,查看source,PdoAuthenticator在内部使用password_verify(),因此它仅在PHP 5&gt; = 5.5.0和PHP 7中可用。
你也可以推出自己的身份验证器。关于在自己的身份验证器回调中处理凭据的问题,您可以执行以下操作:
class MyAuthenticator implements AuthenticatorInterface {
public function __invoke(array $arguments) {
// $arguments['user'] will contain username
// $arguments['password'] will contain password
// Do stuff...
}
}
答案 1 :(得分:0)
应密码密码,以便HTTPBasicAuthentication中间件正常工作。 无法使用PDO驱动程序对明文密码进行身份验证,但是,如果配置数组具有“users”属性,并且具有如下所示的明文密码,则在生产中显然不会出现这种情况。
$app->add(new \Slim\Middleware\HttpBasicAuthentication([
"users" => [
"root" => "t00r",
"somebody" => "passw0rd"
]
]));
https://github.com/tuupola/slim-basic-auth上的GitHub文档足以使用这个中间件但是当它提到明文密码时,引用 -
明文密码仅适用于快速测试。你可能......
我使用PDO用明文密码进行测试,直到密码被散列后它才能正常工作。