【问题标题】:SimpleSamlPhp (SSP): "Random" errors - how to change backend/store?SimpleSamlPhp (SSP):“随机”错误 - 如何更改后端/存储?
【发布时间】:2016-08-07 22:42:48
【问题描述】:

过去几天我一直在使用 simplesamlphp 测试 SAML 2.0。我让 SP 端连接到我公司的 IdP。我处于一种可以正常工作的情况……大多数时候,这是令人困惑的部分。事实:

  • 在 RHEL 7 上使用 simplesamlphp 1.14.2 和 apache 2.4
  • 我正在多次登录和退出测试
  • 我的站点/服务正在通过 https 运行。这同样适用于 simplesamlphp。 IdP 是 http
  • IdP 配置是通过内置 XML 解析器自动生成的。我们正在使用 SHA256 并使用自签名证书发出注销消息
  • 有效! 95% 的时间在 Firefox 和 Chrome 中,这对我来说已经足够了,但它使我的服务无法投入生产......
  • 另外 5% 会抛出类似于 this: "Unable to find the current binding." 的错误。不同的是,在我的日志中它显示为:

    Oct 21 17:30:15 simplesamlphp WARNING [6b6e3c270f] Unable to find the SAML 2 binding used for this request.array (\n)
    Oct 21 17:30:15 simplesamlphp WARNING [6b6e3c270f] Request method: 'GET'array (\n)
    

    以上只是上一篇文章修改的一个例子。请注意,我确实在两行中都看到了array。我查看了记录此错误的源代码,但我无法弄清楚它为什么会出现(不确定这是否重要 - 似乎是由日志记录工具引入的)

  • 这就是事情变得奇怪的地方!我有时会遇到通常的(无限递归左右)PHP 错误:Allowed memory size of X bytes exhausted (tried to allocate Y bytes)。在我的情况下,X 是 256M 但 Y 是 2+G !!!这种情况很少见,但它会发生。当它发生时,PHP 没有多大帮助,它说它发生在“未知的第 0 行”:

    [18-Apr-2016 12:07:18 Europe/London] PHP Fatal error:  Allowed memory size of 262144000 bytes exhausted (tried to allocate 2480381656 bytes) in Unknown on line 0
    
  • 有时日志显示没有错误,但浏览器抱怨空响应

  • Edge/IE 浏览器似乎更容易混淆(这并不奇怪 :))但它会产生相同的日志。例如,空响应显示为“无法加载页面”错误,进而表明 DNS 故障。

  • 大多数情况下,使用后退按钮可以让一切正常工作。并非所有时候...有时会卡住,在这种情况下会出现 simplesamlphp 错误页面并且错误可能会有所不同(SimpleSAML_Error_Error: SLOSERVICEPARAMS)。 URL 指向 simplesamlphp 而不是服务或 IdP,因此刷新会再次导致错误页面。刷新后,回击是没有意义的,会导致循环回到错误页面

我的想法:

  • 这似乎不是配置错误。如果它是可复制的...... IdP 很乐意让我们登录和退出
  • 它不应该是特定于浏览器的
  • PHP 分配大量内存让我相信某处存在错误,但 1.14 是最新的稳定版本

更新 1:

相关(相同错误)-https://groups.google.com/forum/#!topic/simplesamlphp/C8XAQblAECU

更新 2:

经过大量阅读和大量日志,我认为我的 SSP 和我的应用程序之间存在会话冲突。从应用程序中删除所有与会话相关的代码,使 SSP 像魅力一样工作。使用我的会话代码,我看到以下错误:

  • PHP Warning: Unknown: Could not call the sapi_header_callback in Unknown on line 0
  • PHP Notice: Trying to get property of non-object in �5� on line 352
  • Unsuccessful logout. Status was: exception 'sspmod_saml_Error' with message 'Requester' in

我相信上述大多数(如果不是全部)错误是由于 SSP 和会话中的一些奇怪状态造成的,通常不会出现。所以我的新问题更简单:

有人用store.type = 'sql' 和 SQLite 成功配置了 SSP 1.14.2 吗?我可以看到正在创建的sqlite 文件以及其中的几个表,但 SSP 总是返回“无状态”错误。相信把store改成SQL就可以解决我的问题了……

干杯

【问题讨论】:

    标签: php saml simplesamlphp


    【解决方案1】:

    我知道这个问题似乎无处不在,而且非常令人困惑……想象一下查看日志:)

    现在,在 jaimeperez - github 上的 SSP (SimpleSamlPhp) 开发人员的帮助下 - 我们已将其分解为多个“更简单”的问题:

    1. 会话共享:当应用程序和 SSP 都使用$_SESSION 时,您必须:

      • 使用最近发布的SSP 1.14.3,它为此类情况提供了修复
      • 为您的会话命名。在您的应用程序中,在调用 session_start() 之前使用 session_name("XYZ"),并在 SSP 的 config.php 中为 session.phpsession.cookiename 设置一个非默认值。根据我的测试,两者都必须是非默认的(不是“PHPSESSID”)。自动启动会话的 php.ini 选项可能会影响这一点(即:如果设置为 false,则两者之一可以使用默认值 - 未测试)
    2. 5.4.16 版本中的 PHP 错误引起的错误。这使得 PHP SegFault 使 SSP 处于错误状态。这与 SSP 无关,主要是 RHEL/Centos 7 和 PHP 的问题。这解决了错误:

      • Allowed memory size of X bytes exhausted ... in Unknown on line 0
      • PHP Warning: Unknown: Could not call the sapi_header_callback in Unknown on line 0
      • PHP Notice: Trying to get property of non-object in �5� on line 352(或类似的!每次都不同!但指向 Session.php 第 352 行的错误 - 这似乎也完全不相关)

      解决这个问题的方法是升级PHP。根据我的阅读,该问题已在 5.4.20 和 5.5.2 (TBC) 中得到修复

    3. 错误 Unsuccessful logout. Status was: exception 'sspmod_saml_Error'... 是由于 IdP 拒绝为我提供服务,因为我登录和注销次数过多,测试过程中速度过快

    我通常用“我希望这会有所帮助”这句话来结束我的答案......但在这种情况下,我真的希望你不会处于类似的情况:) 希望问题和这个答案包含足够的关键字来让谷歌点这里……

    如果你想关注这个对话,你可以在github

    【讨论】:

    • “在您的应用程序中,在您调用 session_start() 之前使用 session_name("XYZ") 并在 SSP 的 config.php 中为 session.phpsession.cookiename 设置一个非默认值”这适用于其中一个我遇到的问题,但我仍然想知道这样配置的原因是什么。
    猜你喜欢
    • 1970-01-01
    • 2014-09-04
    • 2020-05-09
    • 2013-04-03
    • 2015-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-19
    相关资源
    最近更新 更多