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

时间:2018-08-18 10:07:21

标签: laravel oauth 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 artisan passport:client表中创建一行之外,有人知道oauth_clients到底是做什么的吗?

我在想,也许除了复制oauth_clients表内容外,还需要一些其他东西。

任何建议,不胜感激!谢谢

1 个答案:

答案 0 :(得分:1)

深入研究供应商代码后,我通过修改来解决了问题

  

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

功能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。