Я сам занимаюсь этой проблемой. Я не верю, что есть какая-либо поддержка CORS в Shibboleth IDP, и решение, которое я клоню является активным поддержания активности пинг от клиента:
- Периодически сделать запрос Ajax на месте под Шибболет аутентификации сеанса, чтобы сеанс от времени ожидания (с использованием, например SetTimeout)
- Если этот запрос не удается, бросить полную ошибку страницы, которая запрашивает у пользователя, чтобы перезагрузить страницу с something like this
пока вкладки браузера открыт, а клиентская машина бодрствует, это предотвратит ошибки XHR такого типа, по крайней мере, для session "lifetime":
время жизни (в секундах) (по умолчанию 28800) Максимальная длительность в секундах, что сеанс поддерживается СП будет действительным. Фактическое время может быть меньше этого значения (если IdP указывает, что он должен быть короче), но никогда не будет более длинным. Обратите внимание, что это не повлияет на сеансы, поддерживаемые приложением.
Если клиентский компьютер переходит в спящий режим и достаточно пинги пропущено, или если память сеанс СП будет очищен, они получат полную ошибку на экране довольно сразу и получить перезагружать либо повторной аутентификации или просто восстановить их Shibboleth сессия.
Я думаю, что это лучшее, что мы можем сделать без КОРС в IDP!
Вот конфиг Apache, который в конечном итоге работает для меня в случае, если кто-либо другой земли здесь:
RewriteEngine On
<Location />
AuthType Shibboleth
ShibUseHeaders On
ShibRequireSession On
Require valid-user
AuthGroupFile /etc/httpd/groups
</Location>
RewriteCond "%{LA-F:REMOTE_USER}" =""
RewriteRule ^/session-ping$ /yoursessiondoesnotexist [PT,L]
<Location /yoursessiondoesnotexist>
AuthType None
Require all granted
</Location>
RewriteCond "%{LA-F:REMOTE_USER}" !=""
RewriteRule ^/session-ping$ /ok.html [PT,L]
Alias /ok.html /var/www/ok.html
SetEnvIf Request_URI "^/session-ping$" DONTLOG
CustomLog /dev/stdout ncgl env=!DONTLOG
I опрашивать/сеанс звон каждые пять секунд с XHR и бросить мой «сеанс истек «modal/dimmer, когда он получает код статуса не-200.