gpt4 book ai didi

Spring OAuth @EnableResourceServer 阻止来自 OAuth 服务器的登录页面

转载 作者:行者123 更新时间:2023-12-04 12:20:04 25 4
gpt4 key购买 nike

本地主机的浏览器响应:9999/uaa/oauth/authorize?response_type=code&client_id=acme&redirect_uri= http://example.com是 302 Found,但对 localhost:9999/uaa/login 的响应是 401 Unauthorized。

我可以在添加@EnableResourceServer 之前获取登录 token 。我正在使用 Spring Boot 并扩展 WebSecurityConfigurerAdapter 以将身份验证管理器与数据源一起使用。当我尝试添加 ResourceServerConfigurerAdapter 时,它不会构建。允许登录页面的最简单方法是什么?

@SpringBootApplication
@RestController
@EnableResourceServer
public class OAuthSvcApplication extends WebMvcConfigurerAdapter {

private static final Logger log = LoggerFactory.getLogger(OAuthSvcApplication.class);

@RequestMapping("/user")
public Principal user(Principal user) {
return user;
}
public static void main(String[] args) {
SpringApplication.run(OAuthSvcApplication.class, args);
}

}

@Configuration
@EnableGlobalMethodSecurity(securedEnabled = true)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {


@Autowired
public void configureAuth(AuthenticationManagerBuilder auth,DataSource dataSource, Environment env)
throws Exception {

auth.jdbcAuthentication().dataSource(dataSource);
}


@Configuration
@EnableAuthorizationServer
protected static class OAuth2Config extends AuthorizationServerConfigurerAdapter {


@Autowired
private AuthenticationManager authenticationManager;

@Autowired
private DataSource dataSource;


@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints)
throws Exception {
endpoints.authenticationManager(authenticationManager);
}


@Override
public void configure(AuthorizationServerSecurityConfigurer security)
throws Exception {
security.checkTokenAccess("hasAuthority('USER')");
}

@Override
public void configure(ClientDetailsServiceConfigurer clients)
throws Exception {
clients.inMemory()
.withClient("acme")
.secret("acmesecret")
.authorizedGrantTypes("authorization_code",
"refresh_token", "password").scopes("openid");
}

}
}

最佳答案

SpringSecurityFilterChain 应始终在其他过滤器之前排序。
如果您想为所有或某些端点添加您自己的身份验证,最好的做法是添加您自己的低阶 WebSecurityConfigurerAdapter。如下修改 WebSecurityConfigurerAdapter 子类允许 ResourceServer 使用 jdbc 身份验证管理器:

@Configuration
@Order(-10)
protected static class LoginConfig extends WebSecurityConfigurerAdapter {


@Autowired
private AuthenticationManager authenticationManager;


@Autowired
private DataSource dataSource;

@Override
protected void configure(HttpSecurity http) throws Exception {
http
.formLogin().loginPage("/login").permitAll()
.and()
.requestMatchers().antMatchers("/login", "/oauth/authorize", "/oauth/confirm_access")
.and()
.authorizeRequests().anyRequest().authenticated();
}

@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.parentAuthenticationManager(authenticationManager).jdbcAuthentication().dataSource(dataSource);

}

}

关于Spring OAuth @EnableResourceServer 阻止来自 OAuth 服务器的登录页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29566010/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com