Doctrine 2 и OAuth2.0 Server PHP Клиентские учетные данные недействительны

Я пытаюсь реализовать OAuth2 с доктрина в качестве менеджера организации. Я точно следовал этому уроку:

http://bshaffer.github.io/oauth2-server-php-docs/cookbook/doctrine2/

Вот мой код, который вызывается, когда пользователь делает запрос к API:

// obtaining the entity manager
$entityManager = EntityManager::create($conn, $config);

$clientStorage  = $entityManager->getRepository('OAuthClient');
$clients = $clientStorage->findAll();
print_r($clients); // We are getting the clients from the database.
$userStorage = $entityManager->getRepository('OAuthUser');
$accessTokenStorage  = $entityManager->getRepository('OAuthAccessToken');
$authorizationCodeStorage = $entityManager->getRepository('OAuthAuthorizationCode');
$refreshTokenStorage = $entityManager->getRepository('OAuthRefreshToken');

//Pass the doctrine storage objects to the OAuth2 server class
$server = new \OAuth2\Server([
'client_credentials' => $clientStorage,
'user_credentials'   => $userStorage,
'access_token'       => $accessTokenStorage,
'authorization_code' => $authorizationCodeStorage,
'refresh_token'      => $refreshTokenStorage,
], [
'auth_code_lifetime' => 30,
'refresh_token_lifetime' => 30,
]);

$server->addGrantType(new OAuth2\GrantType\ClientCredentials($clientStorage));

// handle the request
$server->handleTokenRequest(OAuth2\Request::createFromGlobals())->send();

Всякий раз, когда выполняется вызов с использованием правильных учетных данных, я получаю такой ответ:

Array
(
[0] => OAuthClient Object
(
[id:OAuthClient:private] => 1
[client_identifier:OAuthClient:private] => testclient
[client_secret:OAuthClient:private] => testpass
[redirect_uri:OAuthClient:private] => http://fake.com
[hashOptions:protected] => Array
(
[cost] => 11
)

)

[1] => OAuthClient Object
(
[id:OAuthClient:private] => 2
[client_identifier:OAuthClient:private] => trevor
[client_secret:OAuthClient:private] => hutto
[redirect_uri:OAuthClient:private] => https://www.another.com
[hashOptions:protected] => Array
(
[cost] => 11
)

)

)
{"error":"invalid_client","error_description":"The client credentials are invalid"}

Таким образом, мы получаем клиентов из базы данных, мы должны проверять их и возвращать, что они действительно существуют, и выдавать токен доступа. Однако по какой-то причине OAuth2 Server (можно увидеть Вот) не может сопоставить данные учетных данных с сохраненными учетными данными.

Я не думаю, что это проблема Doctrine, потому что я могу довольно легко получить результаты, используя findAll ().

Мой вопрос:

Почему это происходит, и как я могу это исправить?

1

Решение

Я нашел проблему. В учебнике (http://bshaffer.github.io/oauth2-server-php-docs/cookbook/doctrine2/) они не упоминают об этом, когда секрет клиента сверяется с хешированной версией предоставленного секрета клиента.

В учебном пособии они не хэшируют пример клиентского секрета, когда помещают его в базу данных.

Если при вставке в базу данных вы хэшируете свой клиентский секрет, он будет работать как положено.

1

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

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

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