Authentication Cakephp 3摘要身份验证

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

我尝试使用CakePHP3的摘要身份验证来构建一个可伸缩的系统。仅在需要时才要求客户端输入密码,但输入的详细信息不允许访问,而是再次弹出请求凭据的对话框。非常感谢您的任何建议或帮助

AppController::initialize()

用户稳定:

    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')
);