Несколько URL входа в SpringBoot с использованием oAuth - PullRequest
0 голосов
/ 10 января 2019

У меня есть три интерфейса Angular Application, которые обращаются к одному и тому же Backend SpringBoot Application с помощью OAuth.

Мой вопрос заключается в том, могу ли я создать несколько URL-адресов входа для всех трех приложений, поскольку существующий URL-адрес входа

Localhost: 8080 / OAuth / маркер

Но я хочу три логина

  • Localhost: 8080 / client1 / OAuth / лексема

  • Localhost: 8080 / client2 / OAuth / лексема

  • Localhost: 8080 / client3 / OAuth / лексема

Я уже пробовал подобные решения , но в моем случае это не работает.

Основная причина для всего этого - пользователь приложения 1 может легко войти в портал приложения 2. Пытаясь избежать всех этих ситуаций, поэтому вам нужно три разных URL для трех разных приложений внешнего интерфейса.

Пожалуйста, попросите меня обновить его, если вы считаете, что для ответа требуется дополнительная информация.

Заранее спасибо

Вот мой фрагмент кода прилагается

AuthorizationServerConfig

@Configuration
@EnableAuthorizationServer
@Order(2)
public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {

@Autowired
private TokenStore tokenStore;

@Autowired
private AuthenticationManager authenticationManager;

@Qualifier("dataSource")
@Autowired
private DataSource dataSource;

@Override
public void configure(ClientDetailsServiceConfigurer configurer) throws Exception {
    configurer.jdbc(dataSource);
}

@Bean
protected AuthorizationCodeServices authorizationCodeServices() {
    return new JdbcAuthorizationCodeServices(dataSource);
}

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

@Override
public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {
    security
            .checkTokenAccess("isAuthenticated()")
            .allowFormAuthenticationForClients();
}

@Bean
public FilterRegistrationBean corsFilterRegistrationBean() {
    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    CorsConfiguration config = new CorsConfiguration();
    config.setAllowCredentials(true);
    config.addAllowedOrigin("*");
    config.addAllowedHeader("*");
    config.addAllowedMethod("*");
    source.registerCorsConfiguration("/**", config);
    FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
    bean.setOrder(Ordered.HIGHEST_PRECEDENCE);
    return bean;
}
}

ResourceServerConfig

@Configuration
@EnableResourceServer
public class ResourceServerConfig extends ResourceServerConfigurerAdapter {

private static final String RESOURCE_ID = "resource_id";
@Autowired
private TokenStore tokenStore;

@Autowired
private SecuritySettings securitySettings;

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

@Override
public void configure(HttpSecurity http) throws Exception {
    final List<RequestMatcher> notAuthRes = securitySettings.getNotAuthenticatedResources();
    http.cors().and().csrf().disable().authorizeRequests()
            .requestMatchers(notAuthRes.toArray(new RequestMatcher[notAuthRes.size()])).permitAll()
            .anyRequest().authenticated()
            .and()
            .exceptionHandling().authenticationEntryPoint(new HttpStatusEntryPoint(HttpStatus.UNAUTHORIZED))
            .and()
            // this disables session creation on Spring Security
            .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);

}

}

WebSecurityConfigurer

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
public class WebSecurityConfigurer extends WebSecurityConfigurerAdapter {

@Resource(name = "userServiceImpl")
private UserDetailsService userDetailsService;

@Autowired
private DataSource dataSource;

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

@Autowired
public void globalUserDetails(AuthenticationManagerBuilder auth) throws Exception {
    auth.userDetailsService(userDetailsService)
            .passwordEncoder(encoder());
}

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.cors().and().csrf().disable()
            .exceptionHandling().authenticationEntryPoint(new HttpStatusEntryPoint(HttpStatus.UNAUTHORIZED))
            .and()
            .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
}

@Bean
public TokenStore tokenStore() {
    return new JdbcTokenStore(dataSource);
}

@Bean
public BCryptPasswordEncoder encoder() {
    return new BCryptPasswordEncoder();
}

@Bean
@Primary
public DefaultTokenServices tokenServices() {
    final DefaultTokenServices defaultTokenServices = new DefaultTokenServices();
    defaultTokenServices.setTokenStore(tokenStore());
    defaultTokenServices.setSupportRefreshToken(true);
    return defaultTokenServices;
}

}

...