Spring Cloud OAuth2调用认证服务器报Connection refused无法获取用户信息
问题根因排查方向
1. 网络访问层面问题(90%概率是这个原因)
你直接用Postman调用认证服务接口正常,但是组织服务调用报连接拒绝,本质是组织服务运行环境无法访问到你本地8901端口的认证服务,常见场景:
- 组织服务运行在Docker容器/虚拟机/其他局域网机器中:容器/虚拟机内的
localhost指向的是容器/虚拟机自身,不是宿主机,自然无法访问宿主机上启动的认证服务。
解决方案:将组织服务application.yml中security.oauth2.resource.userInfoUri的localhost替换为宿主机的局域网IP(比如192.168.3.12这类本地网卡IP),如果是Docker Compose部署则替换为认证服务的服务名。 - 认证服务仅绑定了本地回环地址:查看认证服务的监听地址,执行命令:
- Windows:
netstat -ano | findstr 8901 - Linux/Mac:
netstat -tunlp | grep 8901
如果监听地址是127.0.0.1:8901,则只有本机进程能访问,需要在认证服务的application.yml中添加配置server.address: 0.0.0.0,让认证服务监听所有网卡地址。
- Windows:
- 组织服务环境配置了HTTP代理:如果组织服务的启动参数配置了全局HTTP代理,会导致请求localhost时走代理失效,添加启动参数禁用本地地址代理即可:
-Dhttp.nonProxyHosts=localhost|127.0.0.1|*.local
2. 配置校验
- 确认认证服务启动端口确实为8901:查看认证服务启动日志,没有端口占用、端口自动漂移的报错。
- 确认调用组织服务时携带的Token,和你直接调用
/auth/user接口的Token为同一个,避免Token过期/无效问题。 - 补充组织服务的OAuth2客户端配置:Spring Cloud Hoxton版本的资源服务器使用
userInfoUri校验Token时,部分场景需要补充客户端配置,在组织服务application.yml中添加:security: oauth2: client: client-id: eagleeye client-secret: "{noop}thisissecret" access-token-uri: http://localhost:8901/auth/oauth/token user-authorization-uri: http://localhost:8901/auth/oauth/authorize resource: userInfoUri: http://localhost:8901/auth/user
3. 验证步骤
直接在组织服务运行的环境(容器/虚拟机/对应服务器)中,用curl命令调用认证服务接口,确认网络连通性:
curl -H "Authorization: Bearer 你的有效Token" http://{你配置的IP}:8901/auth/user
- 如果curl返回正常,说明是组织服务代码层面的配置问题,检查是否自定义了
RestTemplate、是否有拦截器拦截了OAuth2的用户信息请求。 - 如果curl返回连接拒绝,继续排查前面的网络层面问题即可。
内容的提问来源于stack exchange,提问作者Marina
相关产品推荐
相关产品推荐

