gpt4 book ai didi

Spring Boot : Securing api endpoint with oauth2 while having mvc UI pages

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

我试图让 spring-boot mvc 应用程序使用标准登录,同时公开一些具有 oAuth2 安全性的 API 端点。
基本上我的要求如下:

如果用户点击主页(“/”),请检查它是否已通过身份验证。
如果不显示登录表单,则显示主页。
但是用户也应该能够请求 oauth 身份验证 token ,并使用该 token 访问/api/assignment/{id}。

我可以让标准登录工作,我可以让 oauth2 工作,但我无法让它们一起工作。

这是我目前的配置:

WebSecurityConfig

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private DataSource dataSource;

@Override
@Bean
public AuthenticationManager authenticationManagerBean() throws Exception {
return super.authenticationManagerBean();
}

@Override
protected void configure(HttpSecurity http) throws Exception {
super.configure(http);
}

@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.jdbcAuthentication().dataSource(this.dataSource).passwordEncoder(new BCryptPasswordEncoder());
}
}

OAuth2Config
@Configuration
@EnableResourceServer
@EnableAuthorizationServer
public class OAuth2Config {

protected static final String RESOURCE_ID = "oauthdemo";

@Configuration
@EnableResourceServer
protected static class ResourceServer extends ResourceServerConfigurerAdapter {

@Override
public void configure(HttpSecurity http) throws Exception {
http
.httpBasic().disable()
.authorizeRequests()
.antMatchers("/js/**", "/css/**", "/images/**", "/webjars/**", "/login").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.logout()
.permitAll();

}

@Override
public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
resources.resourceId(RESOURCE_ID);
}
}


@Configuration
@EnableAuthorizationServer
protected static class AuthServer extends AuthorizationServerConfigurerAdapter {

@Autowired
@Qualifier("authenticationManagerBean")
private AuthenticationManager authenticationManager;

@Override
public void configure(AuthorizationServerSecurityConfigurer oauthServer) throws Exception {
oauthServer.allowFormAuthenticationForClients();
}

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

@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
clients.inMemory()
.withClient("client")
.authorizedGrantTypes("password", "refresh_token")
.authorities("ROLE_USER")
.scopes("read")
.resourceIds(RESOURCE_ID)
.secret("secret").accessTokenValiditySeconds(3600);
}

}

}

问题是我在尝试打开主页时总是收到以下错误(“/”)
<oauth>
<error_description>
Full authentication is required to access this resource
</error_description>
<error>unauthorized</error>
</oauth>

它不会重定向到登录页面。
我不需要此页面受 oauth2 保护,但即使我直接进入登录页面(“/login”,我可以访问)并提供凭据,我仍然收到“需要完整身份验证”错误。
即使我禁用了基本的 http 身份验证。

有谁知道如何将普通用户 UI 与需要受 OAuth2 保护的 api 端点分开?

最佳答案

你能试试这个吗

http          
.authorizeRequests()
.antMatchers("/js/**", "/css/**", "/images/**", "/webjars/**", "/login").permitAll()
.antMatchers("/login").permitAll()
.antMatchers("/home").authenticated();

考虑到/home 是需要授权的页面。

关于 Spring Boot : Securing api endpoint with oauth2 while having mvc UI pages,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34170436/

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