You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

doorkeeper gem用户名密码验证通过后返回invalid_client错误

问题根因

你遇到的invalid_client错误和用户凭证校验无关,是Doorkeeper的密码授权流默认要求传入OAuth客户端凭证(client_id和client_secret),你当前的请求参数中没有携带这两个参数,导致客户端校验失败。

解决方案

你可以根据业务场景选择以下任意一种方案解决:

方案1:保留客户端校验(推荐,对外提供OAuth服务时使用)

  • 先在你的系统中创建OAuth客户端记录,你可以通过Rails控制台执行以下代码创建:
Doorkeeper::Application.create!(
  name: "你的客户端名称",
  redirect_uri: "urn:ietf:wg:oauth:2.0:oob", # 密码流不需要跳转可以填这个值
  scopes: "read write" # 按你的业务需求配置scope
)
  • 创建完成后,你会得到对应客户端的client_id和client_secret,在请求/oauth/token接口时,将这两个参数加入请求参数即可,示例请求参数如下:
{
  "grant_type": "password",
  "username": "bhagwan",
  "password": "你的密码",
  "client_id": "你生成的client_id",
  "client_secret": "你生成的client_secret"
}

方案2:关闭密码流的客户端校验(适合内部自用接口场景)

如果你不需要对客户端进行校验,可以直接修改config/initializers/doorkeeper.rb配置,跳过密码流的客户端验证,新增以下配置即可:

grant_flows %w[password]

# 新增这一段配置,跳过密码授权的客户端校验
skip_client_authentication do |grant_flows, client_authentication_method|
  grant_flows.include?('password')
end

resource_owner_from_credentials do
  User.find_by(email: params[:username])
  &.authenticate(params[:password]) || nil
end

修改配置后重启Rails服务,原来的不带client参数的请求就可以正常返回token了。

内容的提问来源于stack exchange,提问作者Bhagwan Gurav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 23:36:00