Authentication Cakephp 3摘要身份验证
我尝试使用CakePHP3的摘要身份验证来构建一个可伸缩的系统。仅在需要时才要求客户端输入密码,但输入的详细信息不允许访问,而是再次弹出请求凭据的对话框。非常感谢您的任何建议或帮助 AppController::initialize() 用户稳定:Authentication Cakephp 3摘要身份验证,authentication,cakephp,cakephp-3.0,stateless,digest-authentication,Authentication,Cakephp,Cakephp 3.0,Stateless,Digest Authentication,我尝试使用CakePHP3的摘要身份验证来构建一个可伸缩的系统。仅在需要时才要求客户端输入密码,但输入的详细信息不允许访问,而是再次弹出请求凭据的对话框。非常感谢您的任何建议或帮助 AppController::initialize() 用户稳定: public function beforeSave(\Cake\Event\Event $event) { $entity = $event->data['entity']; // Make a password f
public function beforeSave(\Cake\Event\Event $event)
{
$entity = $event->data['entity'];
// Make a password for digest auth.
$entity->password_hash = DigestAuthenticate::password(
$entity->username,
$entity->plain_password,
env('SERVER_NAME')
);
$entity->created = Time::now();
return true;
}
public function findAuth(\Cake\ORM\Query $query, array $options)
{
$query
->select(['id', 'username', 'password_hash']);
return $query;
}
编辑:从实体中删除代码
我决定深入研究digest getuser函数()并将一些数据输出到未经授权的页面中,以便查看发生了什么
$Password: 8a3575d301f04f08dd461f93e3d55a21
$digest[username]: James
$digest['response']: 4fa261678c753da8e78e4bf98057fd72
$hash: a627c3e68061937e454c321d55e986d3
$request->env('ORIGINAL_REQUEST_METHOD'): GET
只需从实体中删除_setPassword函数。密码将被散列,稍后此散列将用于DigestAuthentication,而不是所需的明文 另外,我还将重构并删除beforeSave中的密码创建,并将其放置到实体中,类似于您现在使用passwordHasher所做的操作。。。
请记住,在这种情况下,您需要更新_setUsername和_setPassword的摘要 只需从实体中删除_setPassword函数即可。密码将被散列,稍后此散列将用于DigestAuthentication,而不是所需的明文 另外,我还将重构并删除beforeSave中的密码创建,并将其放置到实体中,类似于您现在使用passwordHasher所做的操作。。。
请记住,在这种情况下,您需要更新_setUsername和_setPassword的摘要 好吧,原来我犯了一个非常愚蠢的错误! 变化:
好吧,原来我犯了一个非常愚蠢的错误! 变化:
我正在考虑如何从setUsername执行此操作,因为我不知道更改digesthash值所需的密码!我刚刚清理了我的数据库并再次测试了它,遗憾的是它仍然不起作用。我能够在数据库中一致地获得相同的哈希值,但是当提供了正确的凭据时,身份验证似乎没有获得匹配的哈希值。有什么想法吗?我正在考虑如何从setUsername执行此操作,因为我不知道更改digesthash值所需的密码!我刚刚清理了我的数据库并再次测试了它,遗憾的是它仍然不起作用。我能够在数据库中一致地获得相同的哈希值,但是当提供了正确的凭据时,身份验证似乎没有获得匹配的哈希值。有什么想法吗?
$Password: 8a3575d301f04f08dd461f93e3d55a21
$digest[username]: James
$digest['response']: 4fa261678c753da8e78e4bf98057fd72
$hash: a627c3e68061937e454c321d55e986d3
$request->env('ORIGINAL_REQUEST_METHOD'): GET
$entity->password_hash = DigestAuthenticate::password(
$entity->username,
$entity->password_hash, // was plain_password which was not in my model!
env('SERVER_NAME')
);