Keycloak:外部 IdP 的无效 SAML 响应

Keycloak: Invalid SAML Response by External IdP

我正在使用 SAML 和外部 IdP 实施 SSO 选项。如果我在浏览器中单击 SSO 按钮后检查收到的 SAML 响应,我可以看到我需要的身份验证数据(例如用户名和电子邮件),因此与 IdP 的通信工作正常。

但是 Keycloak 不执行登录并向我显示一个页面,上面写着:"We are sorry... Login timeout, Please log in again.",并且没有注册新用户。我的领域中令牌的登录超时设置为 30 分钟。

查看日志我发现以下错误:

keycloak_1  | 00:38:27,888 ERROR [org.keycloak.broker.saml.SAMLEndpoint] (default task-26) Assertion expired.
keycloak_1  | 00:38:27,889 WARN  [org.keycloak.events] (default task-26) type=IDENTITY_PROVIDER_RESPONSE_ERROR, realmId=master, clientId=null, userId=null, ipAddress=172.20.0.1, error=invalid_saml_response

我发现这可能是由于 IdP 和 SP 中的 EntityID 不一致,但我联系了我的 IdP,EntityID 是相同的。

可能是什么问题?

通常,SAML 响应无效。它可以是任何东西:错误的实体 ID、错误的时间、错误的 signing/encryption 签名、....

Source code reference

显然问题是 docker 容器的内部日期在计算机进入待机状态时停止更新,因此这在 docker 容器上的服务提供商的过时日期之间造成了差异以及身份提供者的真实日期。只需重新启动 docker 即可解决问题。