Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs Shibboleth SSO CORS错误_Angularjs_Single Sign On_Shibboleth - Fatal编程技术网

Angularjs Shibboleth SSO CORS错误

Angularjs Shibboleth SSO CORS错误,angularjs,single-sign-on,shibboleth,Angularjs,Single Sign On,Shibboleth,我们的应用程序(AngularJS+REST)受Shibboleth SSO服务提供商的保护。 问题是我们在尝试对REST服务进行ajax调用时看到CORS错误,称重定向到IDP失败“跨源请求被阻止:同一源策略不允许读取远程资源” 但是,如果我们刷新/重新加载浏览器,一切正常。我相信cookie不是第一次创建的,而是在强制重新加载后创建的 显然,每次刷新浏览器都是不可接受的解决方案 为了在不重新加载的情况下工作,需要做什么 谢谢你提前给我指点 我自己正在处理这个问题。我不相信Shibboleth

我们的应用程序(AngularJS+REST)受Shibboleth SSO服务提供商的保护。 问题是我们在尝试对REST服务进行ajax调用时看到CORS错误,称重定向到IDP失败“跨源请求被阻止:同一源策略不允许读取远程资源”

但是,如果我们刷新/重新加载浏览器,一切正常。我相信cookie不是第一次创建的,而是在强制重新加载后创建的

显然,每次刷新浏览器都是不可接受的解决方案

为了在不重新加载的情况下工作,需要做什么


谢谢你提前给我指点

我自己正在处理这个问题。我不相信Shibboleth IDP中有任何CORS支持,我使用的解决方案是来自客户端的主动保持活动ping:

  • 定期向Shibboleth auth session下的位置发出Ajax请求,以防止会话超时(例如使用setTimeout)
  • 如果此请求失败,则抛出一个完整页面错误,提示用户使用
只要浏览器选项卡处于打开状态且客户端计算机处于唤醒状态,这将至少在以下时间内防止此类XHR错误:

生存期(以秒为单位)(默认值为28800) SP维护的会话有效的最长持续时间(秒)。实际时间可能小于该值(如果IdP指示它应该更短),但不会更长。请注意,这不会影响应用程序维护的会话

如果客户端计算机进入睡眠状态,并且错过了足够多的ping,或者如果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
重新编写引擎打开
身份验证类型Shibboleth
白痴
对…的要求
需要有效用户
AuthGroupFile/etc/httpd/groups
重写第二个“%{LA-F:REMOTE_USER}”=”
重写规则^/session ping$/yoursessiondoesnotexist[PT,L]
AuthType无
要求所有授权
重写条件“%{LA-F:REMOTE_USER}”=""
重写规则^/session ping$/ok.html[PT,L]
别名/ok.html/var/www/ok.html
SetEnvIf请求URI“^/session ping$”DONTLOG
CustomLog/dev/stdout-ncgl-env=!唐特洛
我使用XHR每隔五秒钟轮询/会话ping一次,当收到非200状态码时,我会抛出“您的会话已过期”模式/调光器