2015-10-06 94 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状态码时的模式/调光器。