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

标签 laravel oauth laravel-passport

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

这是返回的错误:

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

我已经验证 token 和客户端存在于数据库中,没有过期,没有被撤销,正确存储等。

因为该系统是一个 Multi-Tenancy 系统(每个租户都有自己的数据库),所以我没有使用命令创建通行证客户端
php artisan passport:client

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

我不知道为什么它在我的本地机器上可以正常工作,但不能在生产中正常工作。

有谁知道究竟是什么php artisan passport:client除了在 oauth_clients 中创建一行 table ?

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

任何建议表示赞赏!谢谢

最佳答案

在挖掘供应商代码之后,我通过修改解决了这个问题

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。

关于Laravel Passport 无效的刷新 token - token 未链接到客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51907450/

相关文章:

facebook - 部署到 heroku 而无需使用护照回调重定向到本地主机

laravel - 如何处理 Laravel Passport 中的 OAuth 异常?

php - 如何只插入相同日期的条目不超过4条?

php - 我在 select 中从 laravel 的数据库中得到了空白值

php - 无法在 view.Laravel 中获取值

laravel - 如何在 redis/memcache 中存储 laravel 护照 token ?

laravel - 刷新 token 与 Laravel Passport 中的访问 token 一起被撤销

javascript - 覆盖集合中的原始值

oauth - 在移动浏览器中登录 facebook 时出错

api - Github 使用 2 因素身份验证创建 token