Я пытаюсь реализовать аутентификацию и авторизацию в приложении весенней загрузки (2.2.4) с использованием Spring Security (Spring-Security-Starter).
Вариант использования: На основе username Я хочу перенаправить пользователя для указанного c провайдера аутентификации
- Если имя пользователя заканчивается на 'mit.com' Аутентифицировать пользователя с помощью базы данных (я использую hibernate) - Для этого я могу использовать SpringD UsertailService
Если имя пользователя заканчивается на 'einfochips.com' Аутентифицировать пользователя с использованием протокола SAML 2.0 - с использованием провайдера идентификации, такого как Okta, SSOCircle, OneLogin et c.
Я не могу понять, как я могу это сделать. Я попытался использовать пользовательский фильтр, но не смог этого сделать.
Я просмотрел много статей, но не смог этого достичь.
Я написал ниже код для аутентификации, используя только SAML. Работает нормально. Взяв пользователя в okta idp для входа в систему.
package com.example.demo;
import static org.springframework.security.extensions.saml2.config.SAMLConfigurer.saml;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.saml.userdetails.SAMLUserDetailsService;
@EnableWebSecurity
@Configuration
@EnableGlobalMethodSecurity(securedEnabled = true)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Autowired
SAMLUserDetailsService userDetailsService;
@Value("${security.saml2.metadata-url}")
String metadataUrl;
@Value("${server.ssl.key-alias}")
String keyAlias;
@Value("${server.ssl.key-store-password}")
String password;
@Value("${server.port}")
String port;
@Value("${server.ssl.key-store}")
String keyStoreFilePath;
//Uisng SAML2.0
@Override
protected void configure(final HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.antMatchers("/").permitAll()
.anyRequest().authenticated()
.and()
.apply(saml())
.serviceProvider()
.keyStore()
.storeFilePath(this.keyStoreFilePath)
.password(this.password)
.keyname(this.keyAlias)
.keyPassword(this.password)
.and()
.protocol("https")
.hostname(String.format("%s:%s", "localhost", this.port))
.basePath("/")
.and().userDetailsService(userDetailsService)
.identityProvider()
.metadataFilePath(this.metadataUrl);
}
}
любой может подсказать мне, что я могу настроить таким образом, чтобы я мог использовать любой IDP, такой как okta, ssocircle, OneLogin et c.