Spring Cloud OAuth2登录请求返回401错误排查求助
问题原因及修复方案
1. 资源服务器路径匹配错误(核心问题)
Zuul 路由默认会移除匹配的前缀,你配置的路由规则为/api/security/**,当请求/api/security/oauth/token转发到授权服务时,路径会被裁剪为/oauth/token。而你在ResourceServerConfig中仅放行/api/security/oauth/**路径,无法匹配到服务内部的实际端点,导致资源服务器的安全过滤器直接拦截了token请求返回401。
修复方案,修改ResourceServerConfig的HttpSecurity配置:
@Override public void configure(HttpSecurity http) throws Exception { http.authorizeRequests() // 放行授权服务内部的oauth相关端点 .antMatchers("/oauth/**").permitAll() .anyRequest().authenticated(); }
如果需要保留前缀转发到下游服务,可在Zuul配置中添加:
zuul.routes.security.strip-prefix=false
2. 客户端身份编码校验
请求头Authorization中的Basic认证字符串,是clientId:clientSecret拼接后用UTF-8编码再转Base64得到的,需要确认:
- 拼接时没有多余空格、没有遗漏中间的冒号
- 用到的clientId、clientSecret和配置文件中
config.security.oauth.client.id、config.security.oauth.client.secret完全一致
3. 用户身份逻辑校验
确认自定义的UserDetailsService实现类逻辑正常:
- 按用户名查询用户的逻辑无异常
- 存储的用户密码是通过
BCryptPasswordEncoder加密生成的,和你配置的密码编码器匹配
额外规范提示
你配置的AuthoritationServerConfig类名拼写错误(应为AuthorizationServerConfig),但属于命名规范问题,不影响代码运行。
内容的提问来源于stack exchange,提问作者cjgmj
相关产品推荐
相关产品推荐

