Ruby on Rails集成OmniAuth-StripeConnect遇invalid_client认证错误求助
我之前也碰到过一模一样的问题,折腾了好一阵才找到原因,给你几个实际有效的排查方向:
检查API密钥的格式,不要添加Bearer前缀
错误日志里明确提到No such API key: Bearer,这说明你的请求里把Bearer当成了密钥的一部分。Stripe的API密钥本身是sk_test_或sk_live_开头的字符串,不需要额外加Bearer前缀。去你的OmniAuth配置里看看,是不是不小心把client_secret写成了"Bearer sk_test_xxxx",改成纯密钥即可。核对OmniAuth-StripeConnect的初始化配置
确保你的provider配置参数完全正确,比如:Rails.application.config.middleware.use OmniAuth::Builder do provider :stripe_connect, ENV['STRIPE_CLIENT_ID'], # 从Stripe后台获取的client_id ENV['STRIPE_SECRET_KEY'], # 纯Stripe秘钥,无前缀 scope: 'read_write', # 根据你的需求调整权限 stripe_landing: 'login' # 可选,指定跳转的Stripe页面 end重点确认第二个参数是你的Stripe秘钥,不要混入任何多余字符。
验证环境变量是否正确加载
如果用了环境变量管理(比如dotenv),一定要检查:- .env文件里的变量名和代码里引用的完全一致(比如
STRIPE_SECRET_KEY有没有拼错) - 变量值没有多余的空格或引号
- 重启过Rails服务器,确保新的环境变量生效
- .env文件里的变量名和代码里引用的完全一致(比如
检查Stripe后台的回调URL配置
Stripe后台的OAuth设置里,回调URL必须和你应用的回调路径完全匹配,包括协议(http/https)、域名、完整路径(比如https://your-app.com/auth/stripe_connect/callback)。哪怕是一个字符的差异,都可能导致认证失败。用Stripe OAuth API手动测试,定位问题环节
可以跳过OmniAuth,直接用curl命令测试授权流程:curl https://connect.stripe.com/oauth/token \ -d client_secret=sk_test_your_secret_key \ -d code=your_authorization_code \ -d grant_type=authorization_code如果这个命令能成功拿到access_token,说明问题出在OmniAuth gem的配置上;如果还是报invalid_client,那就要再仔细核对Stripe后台的client_id和秘钥是否属于同一个模式(测试/生产),以及是否关联正确。
内容的提问来源于stack exchange,提问作者Michamp

