Я использую библиотеку spring-security-saml2-core: 2.0.0.M31 для интеграции с провайдером идентификации SAML (ADFS). Я приказываю настроить конфигурацию saml. Я использую конфигурационный файл yml, который l ie вместе с исходным кодом.
spring:
security:
adfs:
loging-page: /saml/sp/discovery?idp=http://adfs.blabla.org/adfs/services/trust
saml2:
service-provider:
entity-id: localhost:8080
alias: adfs-saml
sign-metadata: true
sign-requests: true
want-assertions-signed: true
single-logout-enabled: true
name-ids:
- urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified
keys:
active:
name: blabla-key
private-key: |
-----BEGIN RSA PRIVATE KEY-----
blabla
-----END RSA PRIVATE KEY-----
passphrase: change-it
certificate: |
-----BEGIN CERTIFICATE-----
blabla
-----END CERTIFICATE-----
providers:
- alias: adfs-saml-idp
metadata: https://adfs.blabla.org/FederationMetadata/2007-06/FederationMetadata.xml
link-text: Saml ADFS IDP
name-id: urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified
assertion-consumer-service-index: 0
authentication-request-binding: urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST
verification-keys:
- |
-----BEGIN CERTIFICATE-----
blabla
-----END CERTIFICATE-----
В приведенном выше конфигурационном файле у меня указано свойство c для страницы входа в систему. укажите как loginPage конфигурации Spring-Security:
@Override
public void configure(HttpSecurity http) throws Exception {
http
.addFilter(corsFilter)
.exceptionHandling()
.accessDeniedHandler(problemSupport)
.and()
.cors()
.and()
.headers()
.and()
.frameOptions()
.deny()
.and()
.requiresChannel()
.anyRequest()
.requiresSecure()
.and()
.authorizeRequests()
.antMatchers("/saml/**").permitAll()
.antMatchers("/**").authenticated()
.and()
.formLogin().loginPage(adfsProperties.getLogingPage());
}
Это работает как прелесть для среды разработки. Но для производственного развертывания мне нужно указать другой IDP с разными ключами.
Я пытаюсь переопределить свойства, используя переменные среды и пружинное связывание (это указывается в конвейере развертывания как переменная среды контейнера)
Я могу сделать это успешно, например, для SPRING_SECURITY_ADFS_LOGIN_PAGE
и, например, для SPRING_SECURITY_SAML2_SERVICE_PROVIDER_ENTITY_ID
. Но, кажется, весна специально обрабатывает spring.security.saml2.service-provider.providers
свойства. И я не могу переопределить, например, свойство SPRING_SECURITY_SAML2_SERVICE_PROVIDER_PROVIDERS_METADATA
.
Возможно, использование моего сервера конфигурации или внешнего файла конфигурации .yml для производственного профиля решит мою проблему. Но я хочу понять, как переопределить это с помощью переменных ENV? Может быть, некоторые изменения подходят для переопределения способа инициализации этих свойств в инфраструктуре spring-security-saml2.
Может кто-нибудь помочь, как это сделать?