我刚刚将一个 drupal 网站从一台服务器移到了另一台服务器。在原始服务器上,该网站直接在 apache 中设置。在新服务器上,我在两者之间有一个 docker 层:
该机器运行带有docker的debian系统,docker容器(目前唯一的)具有debian / apache2 / mysql / php设置。容器的80和443端口暴露在外部,迁移后的网站运行正常。但有一个例外:
迁移后的 drupal 网站包含一个 openid_provider 模块。我使用它来登录其他网站。但是,自迁移以来,此功能已损坏:在大多数我尝试使用 openid 登录的网站(其他 drupal 网站、wordpress、mediawiki)上,登录失败。这些网站以“OpenID 验证失败:服务器拒绝 check_authentication”的形式发出消息。
有趣的事实:openid 登录在 stackexchange 网站上仍然有效 ;)
有人知道发生了什么事吗?apache 日志中没有(相关的)错误或警告 - 无论是在 open_id 提供、迁移的站点上,还是在客户端日志中。
我不知道从哪里开始调试以及如何开始调试。如果您需要更多详细信息,请告诉我。
这是我使用的 drupal 模块:https://www.drupal.org/project/openid_provider(我知道,它已被弃用)。
任何帮助,将不胜感激。
答案1
原来是名称解析相关的问题:
所有身份验证请求失败的网站都位于同一台服务器上。该服务器在 /etc/hosts 中有一个条目,它将 OpenID 提供商网站的域名解析为其老的ip。删除该条目后,一切正常。
这也解释了为什么它适用于一些其他服务(托管在其他服务器上)。
有趣的事实:我花了 3 天时间调试 Drupal OpenId 模块,只是忽略了显而易见的部分。