Аутентифицировать весеннее веб-приложение через сервер CAS
Я установил сервер CAS на моем сервере. (с развертыванием войны в Apache Tomcat) . У меня есть информация о пользователе, такая как имя пользователя и пароль, на этом сервере CAS. (в будущем он будет подключаться к LDAP или простой базе данных отношений для учетных данных пользователя. Проблема здесь. Я хочу аутентифицировать мое приложение Spring через этот сервер CAS, но я не смог найти никакой подходящей конфигурации для безопасности Spring. Мой конфиг файл:
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.authorizeRequests()
.antMatchers("/assets","/css", "/js","/font-awesome","/bootstrap","/images").permitAll()
.antMatchers("/", "/home").authenticated()
// .antMatchers("/hi").access("hasRole('ROLE_SUBSCRIPTION') or hasRole('ROLE_ADMIN')")
.antMatchers("/edit").authenticated()
// .antMatchers("/playlists/*").authenticated()
// .antMatchers("/createplaylist").authenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.logout()
.permitAll();
}
@Bean
public ServiceProperties serviceProperties() {
ServiceProperties sp = new ServiceProperties();
sp.setService(env.getRequiredProperty(CAS_SERVICE_URL));
sp.setSendRenew(false);
return sp;
}
@Bean
public Set<String> adminList() {
Set<String> admins = new HashSet<String>();
String adminUserName = env.getProperty(APP_ADMIN_USER_NAME);
admins.add("admin");
if (adminUserName != null && !adminUserName.isEmpty()) {
admins.add(adminUserName);
}
return admins;
}
@Bean
public AuthenticationUserDetailsService<CasAssertionAuthenticationToken> customUserDetailsService() {
return new CustomUserDetailsService(adminList());
}
@Bean
public CasAuthenticationProvider casAuthenticationProvider() {
CasAuthenticationProvider casAuthenticationProvider = new CasAuthenticationProvider();
// casAuthenticationProvider.setAuthenticationUserDetailsService(customUserDetailsService());
// casAuthenticationProvider.setServiceProperties(serviceProperties());
casAuthenticationProvider.setTicketValidator(cas20ServiceTicketValidator());
// casAuthenticationProvider.setKey("an_id_for_this_auth_provider_only");
return casAuthenticationProvider;
}
@Bean
public Cas20ServiceTicketValidator cas20ServiceTicketValidator() {
return new Cas20ServiceTicketValidator(env.getRequiredProperty(CAS_URL_PREFIX));
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
// auth.inMemoryAuthentication().withUser("admin").password("admin").roles("ADMIN");
auth.authenticationProvider(casAuthenticationProvider());
}
3 ответа
Ну, я нашел простую автоматическую настройку для клиента Cas на GitHub на весну всего двумя движениями:) сначала добавьте зависимость, затем добавьте аннотацию https://github.com/Unicon/cas-client-autoconfig-support
Вы можете использовать pac4j для простой настройки: https://github.com/pac4j/spring-security-pac4j и http://www.pac4j.org/1.9.x/docs/clients/cas.html
Примеры: https://github.com/pac4j/spring-security-pac4j-demo/blob/master/src/main/resources/securityContext.xml#L158 или https://github.com/pac4j/spring-security-pac4j-boot-demo/blob/master/src/main/java/org/pac4j/demo/spring/SecurityConfig.java#L244
@kaveh.n Я надеюсь, что вы получаете ошибку 403 при доступе к вашему сервису. Если это ваша проблема, точка входа аутентификации является отсутствующей частью вашей конфигурации. Пожалуйста, следуйте весеннему учебнику для настройки http://docs.spring.io/spring-security/site/docs/3.1.4.RELEASE/reference/cas.html