Дайджест-аутентификация под CakePHP 3

Я пытаюсь создать дайджест-проверку подлинности с использованием компонента Authentification в Cakephp 3.1, и я столкнулся с проблемой. Я использую код ниже, и у меня есть всплывающее окно HTTP-аутентификации, которое появляется сразу после ввода правильного имени пользователя и пароля в предыдущем всплывающем окне. Затем, если я нажимаю «Отмена», у меня есть это: Cake \ Auth \ BasicAuthenticate-> unauthenticated.

Может кто-нибудь сказать, пожалуйста, что я делаю не так?

AppController.php

$this->loadComponent('Auth', [
'authorize' => 'Controller',
'loginRedirect' => [
'controller' => 'Users',
'action' => 'index'
],
'authenticate' => [
'Digest' => [
'fields' => ['username' => 'username', 'password' => 'digest_hash'],
'userModel' => 'Users',
],
],
'loginAction' => [
'controller' => 'Users',
'action' => 'login',
],
'storage' => 'Memory',
'unauthorizedRedirect' => false
]);

UserTable.php

public function beforeSave(Event $event)
{
$entity = $event->data['entity'];

// Make a password for digest auth.
$entity->digest_hash = DigestAuthenticate::password(
$entity->username,
$entity->plain_password,
env('SCRIPT_NAME')
);
return true;
}

В клиентской части

    public function digest(){
$http = new Client();
$response = $http->get('http://localhost/project/api/v1/users/view/22', [], [
'auth' => [
'type' => 'digest',
'username' => 'Digest',
'password' => 'my_password',
]
]);

Когда я проверяю в среде Debug-kit, у меня есть это:

PHP_AUTH_DIGEST     username="Digest", realm="localhost", nonce="57ac3609a5b79", uri="/project/api/v1/users/view/22", response="af0e1fe455aa7f1475df715ef5231b56", opaque="421aa90e079fa326b6494f812ad13e79", qop=auth, nc=00000001, cnonce="0bb461453700ebc1"

3

Решение

Это может быть слишком поздно, но все равно будет полезно для кого-то!

Хорошо используя $this->Auth->unauthorizedRedirect = false,, заставляет AuthComponent генерировать исключение ForbiddenException
исключение вместо перенаправления на другую страницу, если вы не введете правильное имя пользователя и пароль.

Получить регистрацию правильно:

Очевидно, что важно правильно зарегистрировать / добавить дайджест-пароль пользователя, чтобы сделать возможной дайджест-аутентификацию.

Как уже упоминалось в документация мы можем добавить дайджест хешированного пароля, добавив следующий код, как правило, в UsersTable.php:

  public function beforeSave(Event $event)
{
$entity = $event->data['entity'];

// Make a password for digest auth.
$entity->digest_hash = DigestAuthenticate::password(
$entity->username,
$entity->plain_password,
env('SERVER_NAME')
);
return true;
}

Но мы должны быть осторожны с вышеупомянутой переменной / термином:

1. $entity->digest_hash (this should be equivalent to the field you have made to
save password, eg. password_hash)

2. $entity->username (this should be equivalent to the field you have made to
save username, eg. email)

3. $entity->plain_password (again this should be equivalent to the field you have made to
save password, eg. password_hash)

4. env('SERVER_NAME') (this is third parameter for making digest password,
"SERVER_NAME" is default value and we can left it this way.)

В заключение, если у нас есть электронная почта (для имени пользователя) и password_hash (для пароля), то вышеупомянутая функция будет:

 public function beforeSave(Event $event)
{
$entity = $event->data['entity'];

// Make a password for digest auth.
$entity->password_hash= DigestAuthenticate::password(
$entity->email,
$entity->password_hash,
env('SERVER_NAME')
);
return true;
}

Причина, по которой я концентрируюсь на вышеперечисленных вещах, заключается в том, что они могут ошибаться.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]