Мы используем simplesamlphp в качестве поставщика услуг. Мы интегрировались с рядом Idp. Все работает нормально.
Теперь мы хотим изменить архитектуру нашего сервера на load balancer -> webserver -> database server
. Проблема возникает, когда мы ставим load balancer
перед webserver
. IDP получает ошибку.
load balancer
завершает https
, и я считаю, что проблема возникает. Таким образом, когда load balancer
отправляет запрос webserver
, это обычный запрос http
.
Когда я регистрирую начальные события, я получаю
Я собираюсь немного упростить xml
и поместить части, которые были другими
с load balancer
Session: 'idp-name' not valid because we are not authenticated.
Saved state: '_somelongstringofnumbersandletters'
Sending SAML 2 AuthnRequest to '{{their info}}'
Sending message:
<samlp:AuthnRequest ... AssertionConsumerServiceURL="http://{{our-info}}">
<saml:Issuer>http://{{our-info}}</saml:Issuer>
<samlp:NameIDPolicy Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient" AllowCreate="true"/>
</samlp:AuthnRequest>
Таким образом, выше единственные части, которые отличаются между указанием на load balancer
и webserver
, это http
и https
соответственно.
Не был уверен, есть ли способ заставить simplesamlphp
просто вернуть https
. Или он всегда будет проверять текущее состояние запроса и принимать http
.
Просто чтобы убедиться, что я даю все данные. Процесс инициируется SP. Поэтому они просто переходят по URL-адресу типа https://oursite.com/idp-name. И мы всегда используем https
.
Дайте мне знать, если мне нужно что-то уточнить.
ОБНОВИТЬ
Мы решили эту проблему, НЕ завершая HTTPS-запрос в балансировщике нагрузки и позволяя запросу проходить на серверы. Таким образом, наши SSL-сертификаты находятся непосредственно на наших веб-серверах, а не на балансировщике нагрузки.
Я не мог заставить решение работать, но это может быть только моя вина. Нам нужно было быстрое решение, и проще всего было не расшифровывать SSL на балансировщике нагрузки.