У меня есть приложение Spring Boot 1.3.0 с Spring Security OAuth, которое входит как своего рода интеграция с SSO.
Проблема в том, что приложение работает в среде без SSL с нестандартным портом за балансировщиком нагрузки (F5), который заставляет SSL и провайдера OAuth требовать, чтобы все URL-адреса переадресации регистрировались как https, но клиент Spring OAuth (авто -конфигурировано с помощью @EnableOAuthSso) будет перенаправляться только поставщику OAuth со следующим URL-адресом...
https://[provider_host]/oauth/authorize? client_id = [redact] & redirect_uri = http://[application_host]/login & response_type = code & scope = [redact] & state = IpMYTe
Обратите внимание, что возвращаемый redirect_uri создается как http. Несмотря на то, что F5 заставит его https на обратном пути, наш поставщик OAuth не разрешит URI с переадресацией без SSL. Как я могу настроить это?
За исключением контроллеров Spring Data JPA, это всего лишь приложение...
AppConfig.java
@SpringBootApplication(exclude = { HibernateJpaAutoConfiguration.class })
@EnableJpaRepositories
public class AppConfig extends SpringBootServletInitializer {
public static void main(final String... args) {
SpringApplication.run(AppConfig.class, args);
}
@Autowired
public DataSource dataSource;
@Bean(name = "entityManagerFactory")
public LocalContainerEntityManagerFactoryBean getEntityManagerFactoryInfo() {
final LocalContainerEntityManagerFactoryBean fac = new LocalContainerEntityManagerFactoryBean();
fac.setDataSource(dataSource);
fac.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
fac.setPackagesToScan("[redact]");
final Properties props = new Properties();
props.put("hibernate.dialect", "org.hibernate.dialect.SQLServerDialect");
props.put("hibernate.show_sql", "true");
props.put("hibernate.format_sql", "true");
fac.setJpaProperties(props);
return fac;
}
@Bean(name = "transactionManager")
public PlatformTransactionManager getTransactionManager() {
final JpaTransactionManager transactMngr = new JpaTransactionManager();
transactMngr.setEntityManagerFactory(getEntityManagerFactoryInfo().getObject());
return transactMngr;
}
}
SecurityConfig.java
@Configuration
@EnableOAuth2Sso
public class SecurityConfig {
}
application.properties
server.port=9916
server.contextPath=
server.use-forward-headers=true
security.oauth2.client.clientId=[redact]
security.oauth2.client.clientSecret=[redact]
security.oauth2.client.scope=[redact]
security.oauth2.client.accessTokenUri=https://[provider_host]/oauth/token
security.oauth2.client.userAuthorizationUri=https://[provider_host]/oauth/authorize
security.oauth2.resource.userInfoUri=https://[provider_host]/oauth/me
security.oauth2.resource.preferTokenInfo=false
logging.level.org.springframework=TRACE