Laravel Passport invalid_grant 用于密码 grant_type

Posted

技术标签:

【中文标题】Laravel Passport invalid_grant 用于密码 grant_type【英文标题】:Laravel Passport invalid_grant for password grant_type 【发布时间】:2020-05-24 04:32:53 【问题描述】:

我一直在尝试为我的 api 创建一个access_token。我有followed the setup 并且正在使用 Postman 来测试/创建令牌。我似乎无法通过 invalid_grant 错误。

我已经尝试了似乎我能够找到的所有组合,但没有任何运气。这是我的设置:

发送POST 请求至:http://mywebsite.local/oauth/token

在正文中,我将 form-data 设置为此(名称/值):

grant_type      password
client_id       1
client_secret   <super_long_string>
username        my@email.com
password        secret

我使用 tinker 创建了一个虚拟用户:

factory('App\User')->create()

我在上面的用户名/密码中使用了新创建的用户。

无论我在做什么(没有通过任何东西),这都是我经常看到的错误:


    "error": "invalid_grant",
    "error_description": "The provided authorization grant (e.g., authorization code, resource owner credentials) or refresh token is invalid, expired, revoked, does not match the redirection URI used in the authorization request, or was issued to another client.",
    "hint": "",
    "message": "The provided authorization grant (e.g., authorization code, resource owner credentials) or refresh token is invalid, expired, revoked, does not match the redirection URI used in the authorization request, or was issued to another client."

我读过很多次这意味着我试图获得的grant_type 与客户不匹配。我正在使用php artisan passport:client --password 创建客户端,所以我不明白为什么它无效。我只有一个客户,所以我知道我使用的是正确的id。 This issue 好像是一样的东西,我看到了,但已经关闭了。

对于我的标头,我只设置Content-Type application/json,我没有为授权标头设置任何内容。

我不确定还可以尝试什么。感谢您的任何建议!

【问题讨论】:

【参考方案1】:

正如here 所说,从 5.8 版本开始,默认密码“secret”已更新为“password”。所以你输入的是旧密码。

【讨论】:

我现在觉得愚蠢和尴尬的程度超出了图表。谢谢你逗我。【参考方案2】:

尝试为用户散列您的密码。 起初我认为密码至少需要 8 个字符长。 然后,例如如果您使用“test1234”作为创建用户的密码,请转到您的终端并输入:

>> php 工匠修补匠

>> echo bcrypt('test1234')

复制输出并将其保存在您创建的用户的密码数据库列中,而不是 test1234。现在您对http://mywebsite.local/oauth/token 的发帖请求应该可以工作了。

【讨论】:

【参考方案3】:

我在laravel 8 遇到了同样的问题,我通过重新安装laravel passport 解决了它

这些是步骤:

1- 在AuthServiceProvider.php 中评论这一行

if (! $this->app->routesAreCached())        
   //Passport::routes();

2- 在 composer.json 中删除以下行:

 "laravel/passport": "^xx.x",

3- 运行这些命令:

composer dump-autoload
composer update
php artisan migrate:fresh

现在我们要安装laravel passport 4- 运行这些命令:

composer require laravel/passport
php artisan migrate
php artisan passport:install --force

5- 在AuthServiceProvider.php 添加这些行:

use Laravel\Passport\Passport;
class AuthServiceProvider extends ServiceProvider

    protected $policies = [
        'App\Models\Model' => 'App\Policies\ModelPolicy',
    ];

    public function boot()
    
        $this->registerPolicies();

        if (! $this->app->routesAreCached()) 
            
            Passport::routes();
        
    

6- 在config\auth.php 中添加这些代码:

    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
        'api' => [
            'driver' => 'passport',
            'provider' => 'users',
        ],
    ],

完成,经过这些步骤,laravel-passport 工作正常

【讨论】:

以上是关于Laravel Passport invalid_grant 用于密码 grant_type的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Passport 不支持_grant_type

_LIR__与Laravel 5.5和OVH共享主机不一致

Laravel 8、Passport 和 MongoDB 集成

无法找到 [Laravel\Passport\Client] 的工厂

homestead的laravel项目错误:Use of undefined constant JSON_INVALID_UTF8_SUBSTITUTE - assumed ‘JSON_INVAL(代

每天一点点之laravel框架 - Laravel5.6 + Passport实现Api接口认证