2015-10-06 98 views
0

我們的應用程序(AngularJS + REST)受Shibboleth服務提供商保護,用於SSO。 的問題是,我們看到CORS錯誤,試圖使該REST服務Ajax調用時,他說重定向到IDP失敗「跨來源請求阻止:同源策略不允許在讀取遠程資源」Shibboleth SSO CORS錯誤

但是,如果我們刷新/重新加載瀏覽器一切工作正常。我相信這個cookie不是第一次創建的,並且在強制重新加載後創建。

顯然這是不可接受的解決方案,每次刷新瀏覽器。

需要做什麼才能使這項工作無需重新加載?

非常感謝您提前指點。

回答

1

我正在處理這個問題。我不相信這是在Shibboleth的IDP任何CORS支持,我與去解決的辦法是從客戶的積極的保活平:

  • 定期做一個Ajax請求Shibboleth的下一個位置AUTH會議繼續從超時會話(例如,使用的setTimeout)
  • 如果這個請求失敗,扔了提示用戶只要用something like this

重新加載頁面的瀏覽器標籤頁一整頁的錯誤是開放的,並且客戶端機器是清醒的,這將防止這種類型的XHR錯誤至少session "lifetime"

壽命(時間單位爲秒)(默認爲28800) 以秒爲單位由SP維持一個會話將是有效的最長持續時間。實際時間可能小於此值(如果IdP指示它應該更短),但永遠不會更長。請注意,這不會影響應用程序維護的會話。

如果客戶端計算機進入睡眠狀態和足夠坪被錯過,或者如果SP的會話存儲被清除,他們會很直接獲得全屏幕的錯誤,並得到重新加載要麼重新驗證或只是重新建立他們的Shibboleth會話。

我認爲這是我們無法在IDP中使用CORS的最佳方式!


下面是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 

我查詢/會話平每隔五與XHR秒,扔了我的「會話過期「獲取非200狀態碼時的模式/調光器。