Laravel 8使用Passport测试OAuth出现invalid_client错误如何解决?
Laravel 8 Passport
invalid_client 错误原因及解决方案 错误返回如下:
{ "error": "invalid_client", "error_description": "Client authentication failed", "message": "Client authentication failed" }
错误产生原因
- 客户端凭证不匹配:请求OAuth接口时传入的
client_id、client_secret和数据库oauth_clients表中存储的对应值不一致,是该错误最常见的触发原因。 - 客户端类型不匹配:如使用密码授权模式但创建的是客户端凭证类型的客户端,或勾选了「仅限私有客户端」但请求时未正确携带密钥。
- 配置缓存未更新:Passport相关配置修改后未清理Laravel配置缓存,程序加载的仍是旧配置。
- 密钥校验失败:Passport生成的公钥/私钥文件损坏、权限不足,或
APP_KEY修改后未重新生成密钥对,导致客户端签名校验不通过。 - 请求参数格式错误:参数未按要求放在
x-www-form-urlencoded格式的请求体中,或参数名拼写错误(如将client_id误写为client-id)。
解决方案
- 校验客户端凭证:核对请求时传入的
client_id和client_secret,直接查询数据库oauth_clients表对应记录,确认值完全匹配,注意不要包含多余空格。 - 匹配客户端类型:
- 若使用密码授权模式,需执行命令
php artisan passport:client --password生成对应类型的密码授权客户端 - 公开客户端请求时不要传递
client_secret参数,私有客户端必须传递正确的client_secret
- 若使用密码授权模式,需执行命令
- 清理缓存:执行
php artisan config:clear清理旧的配置缓存,必要时同时执行php artisan route:clear清理路由缓存。 - 重新生成密钥:若密钥文件异常,执行
php artisan passport:keys重新生成公钥私钥,确认storage/oauth-public.key和storage/oauth-private.key文件权限为600,所属用户和Web服务运行用户一致。 - 校验请求格式:确认请求头
Content-Type设置为application/x-www-form-urlencoded,所有OAuth必填参数(grant_type、client_id等)都放在请求体中传递,不要放在URL参数内。
内容的提问来源于stack exchange,提问作者dev tech
相关产品推荐
相关产品推荐

