2015-10-06 4 views
0

Наше приложение (AngularJS + REST) ​​защищено поставщиком услуг Shibboleth для SSO. Проблема заключается в том, что мы наблюдаем ошибки CORS при попытке сделать ajax-вызовы для служб REST, заявив, что перенаправление на IDP не выполнено. «Запрос на перекрестный запрос заблокирован: политика одного и того же происхождения запрещает чтение удаленного ресурса по адресу»Ошибка Shibboleth SSO CORS

Однако если мы обновляем/перезагружаем браузер, все работает отлично. Я считаю, что cookie не создается в первый раз и создается после перезагрузки.

Очевидно, что это неприемлемое решение для обновления браузера каждый раз.

Что необходимо сделать, чтобы сделать эту работу без перезагрузки?

Спасибо за любые указатели заранее.

ответ

1

Я сам занимаюсь этой проблемой. Я не верю, что есть какая-либо поддержка 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.