【问题标题】:Shibboleth SSO CORS errorShibboleth SSO CORS 错误
【发布时间】:2016-01-03 22:48:31
【问题描述】:

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

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

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

需要做什么才能在不重新加载的情况下完成这项工作?

提前感谢您的任何指点。

【问题讨论】:

    标签: angularjs single-sign-on shibboleth


    【解决方案1】:

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

    • 定期向 Shibboleth 身份验证会话下的某个位置发出 Ajax 请求,以防止会话超时(例如使用 setTimeout)
    • 如果这个请求失败,抛出一个整页错误提示用户用something like this重新加载页面

    只要浏览器选项卡打开并且客户端机器处于唤醒状态,这将至少在session "lifetime" 内防止此类 XHR 错误:

    lifetime(以秒为单位的时间)(默认为 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
    

    我每五秒使用 XHR 轮询一次 /session-ping,并在收到非 200 状态代码时抛出我的“你的会话已过期”模式/调光器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-14
      • 1970-01-01
      • 2015-03-17
      • 1970-01-01
      • 1970-01-01
      • 2014-07-21
      • 2014-06-09
      相关资源
      最近更新 更多