Rails+Ember.js开发时Doorkeeper返回401 invalid_client错误如何解决
Doorkeeper返回
invalid_client错误的常见原因及解决方案 首先明确:Doorkeeper的默认token端点就是/oauth/token,你当前的端点配置是正确的。
你已经能看到控制台打印Authentication Success,说明用户账号密码校验逻辑已经执行完成,错误出在校验通过后的客户端验证环节,常见原因和对应解决方案如下:
1. 未配置跳过密码授权流的客户端校验(最常见原因)
第一方客户端使用密码授权流时,通常不需要校验client_id和client_secret,但Doorkeeper默认要求请求携带这两个参数,未配置跳过就会抛出该错误。
直接在Doorkeeper配置块中添加以下配置即可:
Doorkeeper.configure do # 保留你已有的其他配置 skip_client_authentication_for_password_grant true end
如果你使用的Doorkeeper版本低于5.1,对应配置项为skip_application_confirmation true。
2. Ember侧ESA配置的客户端参数异常
如果你的业务确实需要校验客户端身份,需要检查两部分内容:
- Rails侧的
oauth_applications表中已经创建了对应的客户端记录,拿到了正确的client_id - Ember项目
config/environment.js中的ESA配置已正确填写客户端参数:
ENV['ember-simple-auth-oauth2'] = { tokenEndpoint: '/oauth/token', clientId: '你Rails端生成的client_id', // 如需校验client_secret则添加下行 // clientSecret: '你Rails端生成的client_secret' };
3. 请求格式或参数不匹配
你可以在浏览器开发者工具的网络面板中检查实际发出的请求,确认符合以下要求:
- 请求的
Content-Type为application/x-www-form-urlencoded,Doorkeeper默认不接收JSON格式的token请求参数 - 请求参数包含
grant_type=password,和你配置的授权流匹配 - 用户名参数名为
username、密码参数名为password,和Doorkeeper配置中取的参数名一致 - 若未开启跳过客户端校验,参数中携带的
client_id和Rails数据库中存储的完全一致
优先尝试添加跳过客户端校验的配置,这是apiup生成的Doorkeeper模板的常见遗漏项,绝大多数同场景问题都可通过该配置解决。
内容的提问来源于stack exchange,提问作者Jackson_ITGuy12
相关产品推荐
相关产品推荐

