Cakephp 5: токен доступа к API не соответствует хешированному токену в БД ⇐ Php
Cakephp 5: токен доступа к API не соответствует хешированному токену в БД
Я работаю над проектом, который требует от меня создания конечной точки API, которую третья сторона (клиенты) может интегрировать в свой веб-сайт, при этом для доступа к конечной точке требуется токен доступа к API
До сих пор мне удавалось сгенерировать токен и хешировать его, а также сохранить простой токен в базе данных, поскольку клиент/разработчик должен видеть простой токен, однако хэш-код следует использовать для проверки на соответствие полю хеш-токена, как мы используйте поле пароля и хешированного пароля.
Ниже показано, как я хеширую это в базу данных:
публичная функция beforeSave(EventInterface $event) { $entity = $event->getData('entity'); если ($entity->isNew()) { $hasher = новый DefaultPasswordHasher(); $entity->public_token = Security::hash(Security::randomBytes(32), 'sha256', false); $entity->token = $hasher->hash($entity->public_token); } вернуть истину; } Ниже включено в мой aplication.php
$authenticationService->loadIdentifier('Authentication.Token'); $authenticationService ->loadAuthenticator('Authentication.Token', [ 'queryParam' => 'токен', 'header' => 'Авторизация', 'tokenPrefix' => 'Носитель', ]); Это включено в мой AppController.php
$this->loadComponent('Authorization.Authorization'); $this->Authentication->setConfig('authenticate', [ 'Токен' => [ 'филды' =>[ 'пароль' => 'токен' ], 'tokenField' => 'токен', 'dataField' => 'токен', 'resolver' => 'Authentication.Orm', 'hashAlgorithm' => 'sha256', ], ]); И мой метод входа в систему UsersController.php
публичная функция входа() { $this->Авторизация->skipAuthorization(); $result = $this->Аутентификация->getResult(); если($результат->isValid()){ пытаться { $this->Authorization->authorize($this->Authentication->getIdentity()->getOriginalData()); }catch(\Исключение $ex){ $пользователь = [ 'message' => 'у вас нет учетных данных для доступа к этому API' ]; } $user = $result->getData(); }еще{ $this->response =$this->response->withStatus(401); $пользователь = [ 'message' => 'неправильные данные для входа' ]; пр($результат); Выход; } $this->set('пользователь', $пользователь); $this->viewBuilder()->setOption('serialize', 'user'); $this->viewBuilder()->setClassName("Json"); } С добавленной ниже функцией отладки:
pr($result); Выход; Я получаю следующую ошибку:
Объект аутентификации\Authenticator\Result ( [_status:protected] => FAILURE_CREDENTIALS_MISSING [_данные:защищено] => [_errors:protected] => Массив ( [0] => Учетные данные для входа не найдены ) ) Типичный токен доступа к API выглядит следующим образом
'token' => '$2y$10$QW2VLbNkxPIbHNhEMxy2qeNbx2/KI21ff0Hjku0mTYWOK245hOXea' 'public_token' => 'f2f7014286b2079d4e4877cd145ab3d7d3024ebaf8c438be231819448e7ab7b8' Моя цель — сделать что-то подобное
$http = новый клиент([ 'headers' => ['Авторизация' => 'Носитель' . f2f7014286b2079d4e4877cd145ab3d7d3024ebaf8c438be231819448e7ab7b8] ]); он должен получить доступ к предоставленному URL-адресу: http://localhost/myapp/api/v1/orders/listing'
Public_token должен проходить аутентификацию по токену поля, который был хеширован с ним.
Однако, когда я использую простой текстовый токен (public_token), он возвращает указанную выше ссылку на ошибку, но когда я использую HASHED токен (поле токена), он возвращает успех.
Буду рад, если кто-нибудь поможет мне решить эту проблему.
Заранее еще раз спасибо.
https://book.cakephp.org/authentication ... html#token
https://book.cakephp.org/authentication ... html#token
https://book.cakephp.org/4/en/controlle ... entication
Я работаю над проектом, который требует от меня создания конечной точки API, которую третья сторона (клиенты) может интегрировать в свой веб-сайт, при этом для доступа к конечной точке требуется токен доступа к API
До сих пор мне удавалось сгенерировать токен и хешировать его, а также сохранить простой токен в базе данных, поскольку клиент/разработчик должен видеть простой токен, однако хэш-код следует использовать для проверки на соответствие полю хеш-токена, как мы используйте поле пароля и хешированного пароля.
Ниже показано, как я хеширую это в базу данных:
публичная функция beforeSave(EventInterface $event) { $entity = $event->getData('entity'); если ($entity->isNew()) { $hasher = новый DefaultPasswordHasher(); $entity->public_token = Security::hash(Security::randomBytes(32), 'sha256', false); $entity->token = $hasher->hash($entity->public_token); } вернуть истину; } Ниже включено в мой aplication.php
$authenticationService->loadIdentifier('Authentication.Token'); $authenticationService ->loadAuthenticator('Authentication.Token', [ 'queryParam' => 'токен', 'header' => 'Авторизация', 'tokenPrefix' => 'Носитель', ]); Это включено в мой AppController.php
$this->loadComponent('Authorization.Authorization'); $this->Authentication->setConfig('authenticate', [ 'Токен' => [ 'филды' =>[ 'пароль' => 'токен' ], 'tokenField' => 'токен', 'dataField' => 'токен', 'resolver' => 'Authentication.Orm', 'hashAlgorithm' => 'sha256', ], ]); И мой метод входа в систему UsersController.php
публичная функция входа() { $this->Авторизация->skipAuthorization(); $result = $this->Аутентификация->getResult(); если($результат->isValid()){ пытаться { $this->Authorization->authorize($this->Authentication->getIdentity()->getOriginalData()); }catch(\Исключение $ex){ $пользователь = [ 'message' => 'у вас нет учетных данных для доступа к этому API' ]; } $user = $result->getData(); }еще{ $this->response =$this->response->withStatus(401); $пользователь = [ 'message' => 'неправильные данные для входа' ]; пр($результат); Выход; } $this->set('пользователь', $пользователь); $this->viewBuilder()->setOption('serialize', 'user'); $this->viewBuilder()->setClassName("Json"); } С добавленной ниже функцией отладки:
pr($result); Выход; Я получаю следующую ошибку:
Объект аутентификации\Authenticator\Result ( [_status:protected] => FAILURE_CREDENTIALS_MISSING [_данные:защищено] => [_errors:protected] => Массив ( [0] => Учетные данные для входа не найдены ) ) Типичный токен доступа к API выглядит следующим образом
'token' => '$2y$10$QW2VLbNkxPIbHNhEMxy2qeNbx2/KI21ff0Hjku0mTYWOK245hOXea' 'public_token' => 'f2f7014286b2079d4e4877cd145ab3d7d3024ebaf8c438be231819448e7ab7b8' Моя цель — сделать что-то подобное
$http = новый клиент([ 'headers' => ['Авторизация' => 'Носитель' . f2f7014286b2079d4e4877cd145ab3d7d3024ebaf8c438be231819448e7ab7b8] ]); он должен получить доступ к предоставленному URL-адресу: http://localhost/myapp/api/v1/orders/listing'
Public_token должен проходить аутентификацию по токену поля, который был хеширован с ним.
Однако, когда я использую простой текстовый токен (public_token), он возвращает указанную выше ссылку на ошибку, но когда я использую HASHED токен (поле токена), он возвращает успех.
Буду рад, если кто-нибудь поможет мне решить эту проблему.
Заранее еще раз спасибо.
https://book.cakephp.org/authentication ... html#token
https://book.cakephp.org/authentication ... html#token
https://book.cakephp.org/4/en/controlle ... entication
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Попытка получить токен доступа и токен обновления от API Spotify (Python)
Anonymous » » в форуме Python - 0 Ответы
- 13 Просмотры
-
Последнее сообщение Anonymous
-