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

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

这是返回的错误:

{
"error": "invalid_request",
"message": "The refresh token is invalid.",
"hint": "Token is not linked to client"
}

我已经验证了令牌和客户端存在于数据库中,未过期,未被撤销,存储是否正确等.

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

php artisan passport:client

相反,我复制了每个租户的护照oauth_clients表和内容 – 以便每个租户使用相同的客户端凭据,例如从前端登录,从应用程序登录(但具有不同的端点).

我不知道为什么它在我的本地机器上工作正常而不是生产.

有谁知道究竟什么是php工匠护照:除了在oauth_clients表中创建一行之外,客户端还做什么?

我想也许不仅仅需要复制oauth_clients表内容.

任何建议赞赏!谢谢

最佳答案 在挖掘供应商代码后,我通过修改修复了问题

vendor/league/oauth2-server/src/Grant/RefreshTokenGrant.php

function validateOldRefreshToken

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');
    }

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.

点赞