URL конечной точки не найден из-за перезаписи
Мы используем Spring Security
с SAML2
расширение в нашем проекте. В настоящее время мы хотим обновить версию 1.0.0 до 1.0.3, но столкнулись с проблемой.
Наше приложение работает в Tomcat
который имеет веб-сервер Apache перед ним. Веб-сервер выполняет перезапись URL-адресов, что означает, что запросы, поступающие в Tomcat, имеют другие URL-адреса, чем запросы на веб-сервере (например, на веб-сервере это "/saml/SSO", но в Tomcat это "/ctx/saml/SSO"),
Я отследил проблему до проверок, выполненных в SAMLUtil.getEndpoint(...), которые ожидают точного равенства входящего и настроенного URL конечной точки, но это не так для нас из-за переписывания. (На самом деле поведение этого метода изменилось между 1.0.0 и 1.0.3.)
Я думаю о некоторых обходных путях для решения этой проблемы, но мне интересно, если мы единственные, кто имеет это. Я ожидаю, что переписывание URL-адресов в веб-сервере не так уж редко. Есть ли простое решение для этого, о котором я не знаю?
1 ответ
Попробуйте предоставить экземпляр компонента SAMLContextProviderLB вместо SAMLContextProviderImpl:
Пример конфигурации Java (адаптируйте его к XML, если вам нужно):
@Bean
public SAMLContextProviderImpl contextProvider() {
SAMLContextProviderLB samlContextProviderLB = new SAMLContextProviderLB();
samlContextProviderLB.setScheme("https");
samlContextProviderLB.setServerName("myserver.com");
samlContextProviderLB.setServerPort(443);
samlContextProviderLB.setIncludeServerPortInRequestURL(false);
samlContextProviderLB.setContextPath("/mycontextpath");
return samlContextProviderLB;
}
И установите имя сервера в соответствии с именем вашего сервера виртуального хоста обратного прокси.