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

使用omniauth_openid_connect gem认证失败:Client credentials are invalid求助

排查OmniAuth OpenID Connect获取Access Token时的"Client credentials are invalid"错误

以下是针对该问题的具体排查步骤:

  • 排查Discovery模式与手动配置的冲突
    你同时开启了discovery: true和手动配置了authorization_endpoint、token_endpoint等地址,部分身份提供商的Discovery文档返回的端点可能与手动配置不一致,导致请求发送到错误地址。建议暂时注释掉所有手动配置的端点字段,让gem自动从.well-known/openid-configuration拉取正确的端点地址,测试是否能正常获取token。

  • 强制设置客户端凭证的认证方式
    部分IDP要求在Token请求中通过HTTP Basic Auth传递client_id和client_secret,而非放在请求体里。你可以在client_options中添加auth_scheme: :basic_auth,强制使用Basic Auth方式传递凭证:

    client_options:
    {
      # 其他配置...
      auth_scheme: :basic_auth
    }
    
  • 验证Redirect URI的精确匹配
    身份提供商后台配置的Redirect URI必须与代码中的redirect_uri完全一致,包括域名、路径、末尾斜杠、HTTP/HTTPS协议等。检查#{ConfigSettings.api.base_url}front_end/users/auth/openid_connect/callback拼接后的完整地址,是否和IDP后台配置的一字不差。

  • 检查Scope参数的格式与要求
    你设置了send_scope_to_token_endpoint: false,但部分IDP要求在Token请求中必须携带Scope参数。另外,尝试将Scope从符号数组改为字符串数组,避免潜在格式问题:

    scope: ["openid", "profile", "groups_rewardops", "scope_rewardops"]
    

    同时确认这些Scope已在IDP后台为你的客户端授权。

  • 确认Issuer地址的正确性
    检查ConfigSettings.desjardins.issuer_url是否与IDP的Discovery文档中的issuer字段完全一致,包括是否带有末尾斜杠、域名拼写等细节,Issuer不匹配也可能导致凭证验证失败。

  • 查看Token请求的详细日志
    开启详细日志排查实际发送的请求内容:
    在config/initializers/devise.rb或单独的OmniAuth初始化文件中添加:

    OmniAuth.config.logger = Rails.logger
    Rails.logger.level = :debug
    

    查看日志中Token请求的URL、请求头和请求体,确认client_id和client_secret是否正确传递,请求格式是否符合IDP要求。也可以用抓包工具直接查看请求详情。

  • 检查IDP客户端的后台配置
    确认IDP后台的客户端配置:

    • 是否启用了authorization_code授权流程(你使用的response_type: :code)
    • 客户端是否处于激活状态
    • 是否设置了IP白名单等限制,导致请求被拦截
    • 客户端是否被授权使用指定的Scope

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:39:20