Ошибка аутентификации клиента при попытке получить токен доступа oAuth

Я работаю над Ларавел 4.2 приложение построено с Динго / апи а также NeoEloquent поддерживать базы данных Graph. Я хочу реализовать OAuth, возможно, используя lucadegasperi / oauth2-сервера Laravel, но это не работает с NeoEloquent. После того, как я создал клиента в базе данных, при попытке Authorizer :: issueAccessToken () я получаю следующую ошибку:

exception 'League\OAuth2\Server\Exception\InvalidClientException' with message 'Client authentication failed.' in /home/vagrant/code/vendor/league/oauth2-server/src/Grant/PasswordGrant.php:114
Stack trace:
#0 /home/vagrant/code/vendor/league/oauth2-server/src/AuthorizationServer.php(275): League\OAuth2\Server\Grant\PasswordGrant->completeFlow()
#1 /home/vagrant/code/vendor/lucadegasperi/oauth2-server-laravel/src/Authorizer.php(80): League\OAuth2\Server\AuthorizationServer->issueAccessToken()
#2 /home/vagrant/code/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php(205): LucaDegasperi\OAuth2Server\Authorizer->issueAccessToken()

Я не могу найти реализацию OAuth для Laravel, которая поддерживает базы данных Graph или работает с NeoEloquent. У кого-нибудь есть идеи, как это решить?


Обновить

Часть моего composer.json:

"require": {
"laravel/framework": "4.2.*",
"vinelab/neoeloquent": "*",
"laravelbook/ardent": "~2.4",
"doctrine/dbal": "~2.5",
"lucadegasperi/oauth2-server-laravel": "3.*",
"dingo/api": "0.8.*"},

Все мои модели расширяют мой собственный NeoArdent, который является копией laravelbook / Ardent с некоторыми изменениями в определениях отношений, чтобы он работал с NeoEloquent.

Мой тип грантов в приложении / config / packages / lucadegasperi / oauth2-server-laravel / oauth2.php

'grant_types' => [
'password' => [
'class' => '\League\OAuth2\Server\Grant\PasswordGrant',
'callback' => function($username, $password) {
if( Auth::validate([
'email'    => $username,
'password' => $password,
])){
$user = User::where('email', $username)->first();
return $user->id;
} else {
return false;
}
},
'access_token_ttl' => 3600
]
]

Мое определение провайдера аутентификации находится в app / config / packages / dingo / api / config.php

'auth' => [
'oauth' => function ($app) {
$provider = new Dingo\Api\Auth\LeagueOAuth2Provider($app['oauth2-server.authorizer']->getChecker());

$provider->setUserResolver(function ($id) {
return User::findOrFail($id);
});

$provider->setClientResolver(function ($id) {
return User::findOrFail($id);
});
return $provider;
}
]

Прежде чем пытаться получить код авторизации, я временно использую это для создания клиента:

if (!DB::table('oauth_clients')->count()) {
$client = [
'id' => 'angularApp',
'secret' => 'angularAppSecret',
'name' => 'angularApp'
];
DB::table('oauth_clients')->insert($client);
}

И после этого я делаю это:

Auth::login($user);
Input::merge(['grant_type' => 'password', 'client_id' => 'angularApp', 'client_secret' => 'angularAppSecret']);
return AuthorizerFacade::issueAccessToken();

что дает мне ошибку выше.

Я надеюсь, что это немного помогает в понимании моей проблемы.

2

Решение

Я не мог долго ждать, поэтому я просто перешел на использование MongoDB, используя bmcmurray / пламенная-MongoDB который является вилкой laravelbook / Ardent поддерживать jenssegers / Laravel-MongoDB. Я использовал Ardent до того, как перешел на базы данных Graph, а затем построил свой собственный форк для laravelbook / Ardent поддерживать Vinelab / NeoEloquent, так что мой код не так сильно меняется.

Существует гораздо больше поддержки при использовании MongoDB с OAuth, как парень, который опубликовал этот вопрос. Я уверен, что теперь могу заставить работать OAuth.

0

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

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

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