Spring Boot OAuth Google登录回调遇redirect_uri_mismatch错误求助
我之前集成Spring Boot和Google OAuth时也踩过这个一模一样的坑,给你列几个实际有效的排查步骤:
严格核对重定向URI的每一个字符
Google的OAuth对redirect_uri的匹配要求完全一致,包括协议(http/https)、端口、路径,甚至末尾的斜杠都不能错。你要确认Google开发者控制台里的Authorized redirect URIs是不是完全等于http://localhost:8787/auth/google——别小看这点,我之前就是不小心多打了个末尾斜杠,折腾了好久才发现。检查配置文件中的redirectUri设置
打开你的social-cfg.xml,确认里面的Google相关配置里,redirect_uri是不是配置成了完整的绝对路径:google.client-id=你的客户端ID google.client-secret=你的客户端密钥 google.redirect-uri=http://localhost:8787/auth/google如果用了相对路径(比如
/auth/google),Spring可能会根据当前请求的上下文路径自动拼接,要是你的应用有上下文路径(比如/app),就会生成错误的URI。验证SocialConfig.java中的模板配置
看看你在SocialConfig.java里构建GoogleOAuth2Template的时候,是不是传入了正确的redirectUri参数?比如:@Bean public GoogleOAuth2Template googleOAuth2Template( @Value("${google.client-id}") String clientId, @Value("${google.client-secret}") String clientSecret, @Value("${google.redirect-uri}") String redirectUri) { return new GoogleOAuth2Template(clientId, clientSecret, redirectUri); }要是这里的redirectUri和控制台的不一致,肯定会触发不匹配错误。
确认Spring Boot的实际运行端口
有时候我们以为配置了server.port=8787,但可能启动时用命令行参数(比如--server.port=8080)或者其他配置文件覆盖了这个值。启动应用后,看控制台的Tomcat启动日志,确认实际监听的端口是不是8787,比如日志里会有类似Tomcat started on port(s): 8787 (http)的信息。清除缓存或用隐身模式测试
浏览器有时候会缓存旧的授权请求会话,导致发送的redirect_uri还是之前错误的版本。试试清除浏览器缓存,或者直接用隐身窗口打开授权链接,排除缓存干扰。检查OAuth客户端的类型
在Google开发者控制台里,确认你创建的OAuth客户端是Web应用类型——只有Web应用类型才需要配置Authorized redirect URIs,如果选了桌面应用、Android等其他类型,配置项不生效,自然会报错。
内容的提问来源于stack exchange,提问作者this_is_om_vm

