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
相关产品推荐
相关产品推荐

