Php &引用;收到一个将来有效的断言。检查IdP和SP上的时钟同步;

Php &引用;收到一个将来有效的断言。检查IdP和SP上的时钟同步;,php,simplesamlphp,Php,Simplesamlphp,我正在我的应用程序中使用。大多数时候都很好,没有问题。其他时候我会这样: SimpleSAML_Error_Error: UNHANDLEDEXCEPTION Backtrace: 0 ssoclient/www/module.php:180 (N/A) Caused by: SimpleSAML_Error_Exception: Received an assertion that is valid in the future. Check clock synchronization on I

我正在我的应用程序中使用。大多数时候都很好,没有问题。其他时候我会这样:

SimpleSAML_Error_Error: UNHANDLEDEXCEPTION
Backtrace:
0 ssoclient/www/module.php:180 (N/A)
Caused by: SimpleSAML_Error_Exception: Received an assertion that is valid in the future. Check clock synchronization on IdP and SP. 
Backtrace:
3 ssoclient/modules/saml/lib/Message.php:565 (sspmod_saml_Message::processAssertion)
2 ssoclient/modules/saml/lib/Message.php:523 (sspmod_saml_Message::processResponse)
1 ssoclient/modules/saml/www/sp/saml2-acs.php:75 (require)
0 ssoclient/www/module.php:135 (N/A)

为什么会发生这种情况,我如何解决?我需要更改系统时间吗?(我使用的是Debian)。

对我来说,这似乎是一个时间问题,很可能是没有正确同步

有一个工具(还有一个守护进程)可以为您监视时间,因此您可以始终保持同步。安装它并配置守护进程,我想这可以解决您的问题。

这个“问题”是已知的-请参阅-并归结为服务提供商和身份提供商之间错误的时钟同步

很可能,它们现在大约在60秒的时间限制内,因此“偶尔”它们会脱离同步边界

您可以通过以下方式对此进行补救:

  • (最佳)通过ntpd将两个系统同步到相同的已知时基
  • 将两个系统中的一个时钟切换到另一个
还有更多创造性的可能性,例如:

  • 具有轮询一个系统的cron作业,并且
  • 在任一系统上每隔一段时间运行netdate
这两种“解决方案”容易出现错误和“跳过时间”问题(即时钟不会从错误时间缓慢漂移到正确时间,而是直接设置为“正确”值)。根据其他条件/软件的不同,这也可能会产生影响


最后,您可以修改modules/saml/lib/Message.php并增加时间增量,即使这是“掩盖问题”,假设有某个过程使两个系统最多不同步60”(有一些创造性的时间设置方案,不基于ntpd,可以这样做).

当我们使用SimpleSAML进行身份验证,然后在应用程序级别处理单独的会话时,modules/saml/lib/Message.php中增加时间有什么危害吗?这不是一个非常干净的解决方案,您必须维护它。如果可能,请解决真正的问题:同步时钟。