Laravel Passport刷新令牌无效-令牌未链接到客户端

Laravel Passport刷新令牌无效-令牌未链接到客户端,laravel,oauth,laravel-passport,Laravel,Oauth,Laravel Passport,我在Laravel 5.5上使用Passport,尝试刷新访问令牌时收到错误-仅在生产服务器上-本地开发环境工作正常 这是返回的错误: { "error": "invalid_request", "message": "The refresh token is invalid.", "hint": "Token is not linked to client" } 我已经验证了令牌和客户端是否存在于数据库中、是否已过期、是否已撤销、是否正确存储等 因为系统是一个多租户系统(每个租户都有自己的数

我在Laravel 5.5上使用Passport,尝试刷新访问令牌时收到错误-仅在生产服务器上-本地开发环境工作正常

这是返回的错误:

{
"error": "invalid_request",
"message": "The refresh token is invalid.",
"hint": "Token is not linked to client"
}
我已经验证了令牌和客户端是否存在于数据库中、是否已过期、是否已撤销、是否正确存储等

因为系统是一个多租户系统(每个租户都有自己的数据库),所以我没有使用命令创建passport客户端

php artisan passport:client
相反,我复制了每个租户的passport
oauth_clients
表和内容,以便每个租户使用相同的客户端凭据,例如从前端登录、从应用程序登录(但使用不同的端点)

我不明白为什么它在我本地的机器上工作正常,但在生产上却不正常

除了在
oauth_clients
表中创建一行之外,有人知道
php artisan passport:client
到底做了什么吗

我认为可能需要的不仅仅是复制
oauth\u客户机
表内容


任何建议,谢谢!谢谢

在深入了解供应商代码后,我通过修改

供应商/league/oauth2服务器/src/Grant/RefreshTokenGrant.php

函数ValidateOrdRefreshToken

改变

if ($refreshTokenData['client_id'] !== $clientId) {
        $this->getEmitter()->emit(new RequestEvent(RequestEvent::REFRESH_TOKEN_CLIENT_FAILED, $request));
        throw OAuthServerException::invalidRefreshToken('Token is not linked to client');
    }

即使$clientId匹配,函数也会被传递一个字符串(根据需要),但$refreshTokenData['client_id']是一个整数


fml.

分享您如何创建刷新的令牌,以及您将其存储在本地和重新发送的位置?
if ($refreshTokenData['client_id'] != $clientId) {
        $this->getEmitter()->emit(new RequestEvent(RequestEvent::REFRESH_TOKEN_CLIENT_FAILED, $request));
        throw OAuthServerException::invalidRefreshToken('Token is not linked to client');
    }