繁体   English   中英

尝试获取oAuth访问令牌时客户端身份验证失败

[英]Client authentication failed when trying to get oAuth access token

我正在使用使用dingo / apiNeoEloquent构建的Laravel 4.2应用程序来支持Graph数据库。 我想实现OAuth,可能使用lucadegasperi / oauth2-server-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()

我找不到支持Graph数据库或与NeoEloquent一起使用的Laravel的任何OAuth实现。 有谁知道如何解决这个问题?


更新

我的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一起使用。

我在app / 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();

这给了我上面的错误。

我希望这有助于理解我的问题。

我迫不及待地等待了很长时间,所以我只好使用bmcmurray / ardent-mongodb来使用MongoDB,这是laravelbook / Ardent的一个分支,用于支持jenssegers / laravel-mongodb 在转换为Graph数据库之前,我曾使用Ardent,然后为laravelbook / Ardent构建了自己的fork以支持Vinelab / NeoEloquent ,因此我的代码不会发生太大变化。

将MongoDB与OAuth结合使用还有更多支持,例如发布此问题的人 我确定我现在可以使OAuth正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM