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

Spring Boot集成Google OAuth2认证失败:client_secret缺失问题

Spring Boot Google OAuth2认证遇"client_secret is missing"问题

问题详情

在Spring Boot + Angular应用中实现Google OAuth2认证时,触发invalid_request错误,提示client_secret is missing。

已在application.yml中配置client_id和client_secret:

spring:
  security:
    oauth2:
      client:
        registration:
          google:
            clientId: <my-client-id>
            clientSecret: <my-client-secret>

通过RestTemplate调试日志发现,令牌请求中未包含client_secret参数:

HTTP POST https://www.googleapis.com/oauth2/v4/token
Writing [{grant_type=[authorization_code], code=[4/0EWygzh84wyVNXT4HcB_OaRr465vKH-a8mnQW5AuqCFA9uRVkbkvEMmq3RpV-qVxl1h1xgg], redirect_uri=[http://localhost:8014/demo/login/oauth2/code/google], client_id=[<my-client-id>]}] as "application/x-www-form-urlencoded;charset=UTF-8"

但调试OidcAuthorizationCodeAuthenticationProvider.authenticate方法时,确认authorizationCodeAuthentication中的ClientRegistration已正确包含client_secret:

ClientRegistration{registrationId='google', clientId='<my-client-id>', clientSecret='<my-client-secret>', clientAuthenticationMethod=org.springframework.security.oauth2.core.ClientAuthenticationMethod@4fcef9d3, authorizationGrantType=org.springframework.security.oauth2.core.AuthorizationGrantType@5da5e9f3, redirectUri='{baseUrl}/{action}/oauth2/code/{registrationId}', scopes=[openid, profile, email], providerDetails=org.springframework.security.oauth2.client.registration.ClientRegistration$ProviderDetails@4ec90377, clientName='Google'}

排查与解决方向

  • 确认Google OAuth客户端类型:在Google Cloud控制台中,必须创建Web应用类型的OAuth客户端ID。若误选桌面/移动应用类型,Google会拒绝接收client_secret,或反向提示缺失(此类应用无需client_secret)。
  • 显式指定客户端认证方式:强制Spring Security将client_secret作为表单参数传递,在配置中添加clientAuthenticationMethod: post:
    spring:
      security:
        oauth2:
          client:
            registration:
              google:
                clientId: <my-client-id>
                clientSecret: <my-client-secret>
                clientAuthenticationMethod: post
    
  • 检查请求头的Basic Auth信息:若使用默认的client_secret_basic认证方式,client_id和client_secret会被Base64编码后放入Authorization请求头,此时表单参数中不会显示client_secret。需开启org.springframework.web的DEBUG日志,查看完整请求头是否包含正确的Basic Auth信息。
  • 升级Spring Security版本:部分旧版本存在OIDC场景下client_secret传递的bug,建议升级到5.7.x及以上的稳定版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 19:10:38