我在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_clients
表的内容。
任何建议都很感谢!谢谢
2条答案
按热度按时间b1zrtrql1#
在深入研究了供应商代码之后,我通过修改
vendor/league/oauth2-server/src/Grant/RefreshTokenGrant.php
函数验证OldRefreshToken
已更改
至
即使$clientId匹配,也会向函数传递一个字符串(根据需要),但$refreshTokenData ['client_id']是一个整数。
格式
vsnjm48y2#
消息:“刷新标记无效”在OP描述的情况下似乎是误导性的。实际上,在对传递的client_id参数进行类型检查时引发了此异常。对我来说,传递的参数(client_id)的数据类型是string。它应该是一个数字(int)。
更改以下内容
结束日期
解决了我的问题。
注:建议不要更改供应商。请在有效负载中查找client_id参数的数据类型。