【问题标题】:406 "Not Acceptable" error when using JanRain OpenID Library with Google将 JanRain OpenID 库与 Google 一起使用时出现 406“不可接受”错误
【发布时间】:2010-12-02 14:32:12
【问题描述】:

我正在使用最新的 Janrain openid 库示例,发现过程似乎与 Yahoo、myopenid.com 和其他人配合得很好......

但我被谷歌端点(https分号//www.google.com/accounts/o8/id)卡住了。在我被重定向到谷歌页面之前,Consumer.php 只返回 406 apache 错误。

我的所有安装都可以在这里找到: http://www.coplango.com/vendor/openid/examples/

  • 点击consumer尝试consumer示例,但是discovery.php同样失败,证明它发生在发现过程中...
  • 您还可以检查 detect.php 来检查我的安装 - HTTP 获取测试失败并返回 503,因为它试图到达返回 503 的地址。休息很好。

我以为是 php-yadis 指定了 Accept: application/xrds+xml 标头,但我检查了代码,其他类型也被接受,例如 text/htmlapplication/xhtml+xml

有人遇到过这个吗?

有什么线索吗?

非常感谢!

【问题讨论】:

    标签: php apache openid janrain


    【解决方案1】:

    解决方案:

    在.htaccess文件中放

    SecFilterEngine Off
    

    【讨论】:

      【解决方案2】:

      好的,

      我已经进一步调查,这似乎取决于我的提供者,如果任何包含死亡词“/id”的字符串作为 GET 参数传递,他会返回 406 错误。我花了好几天才弄清楚这不是 openid !

      关于我正在使用 PlanetHoster 的信息,如果其他人遇到过这个。我已经向他们发送了票务请求并等待他们的答复。

      【讨论】:

      • 出于安全考虑,这似乎已被禁用。如果您遇到同样的问题,请查看此线程:stackoverflow.com/questions/1504744/…
      • 我在使用 timthumb 时也遇到了这个错误 :( 我的提供者也是 planethoster.. 我会给他们发一张票..
      • 问题是他们不接受 http: 作为 url 中的 var。
      【解决方案3】:

      在我的机器上运行消费者示例,我收到以下错误:

      Got no response code when fetching https://www.google.com/accounts/o8/id
      CURL error (60): SSL certificate problem, verify that the CA cert is OK. Details:
      error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
      

      这意味着 curl 无法验证 google 的 https 服务器证书。您可以通过提供带有 CA 证书的 curl 以通过 CURLOPT_CAINFO/CURLOPT_CAPATH 验证 google 的证书来解决此问题,或者 - 更简单 - 停止通过 CURLOPT_SSL_VERIFYPEER 验证证书。 Auth/Yadis/ParanoidHTTPFetcher.php 中的以下更改为我完成了后者:

      --- ParanoidHTTPFetcher.php.orig        2009-04-22 02:31:20.000000000 +0800
      +++ ParanoidHTTPFetcher.php     2009-09-30 22:35:24.093750000 +0800
      @@ -127,6 +127,9 @@
                               Auth_OpenID_USER_AGENT.' '.$curl_user_agent);
                   curl_setopt($c, CURLOPT_TIMEOUT, $off);
                   curl_setopt($c, CURLOPT_URL, $url);
      +
      +            // don't verify server cert
      +            curl_setopt($c, CURLOPT_SSL_VERIFYPEER, FALSE);
      
                   curl_exec($c);
      

      当然,您的 curl 安装也必须支持 ssl - 检查您的 phpinfo()。另外,如果CURLOPT_SSL_VERIFYPEER 被禁用,CURLOPT_SSL_VERIFYHOST 可能还需要为TRUEFALSE

      另见http://www.openrest.eu/docs/openid-not-completely-enabled-for-google.php(通过相关Why doesn't Google OpenID provider work with PHP-OpenId on my server?)。

      【讨论】:

      • 非常感谢您的回答和链接!我仍然对我收到 406 错误而不是链接中指定的空白页感到惊讶。 406 非常具体:它应该归结为响应标头...无论如何,我会尽快尝试并让您知道!
      • 嗯.. 遗憾的是它不能解决问题.. 我会看看我是否可以提供更多输入。非常感谢您的回答,虽然这可能解决了另一个问题!同时,如果有人知道这里可能发生了什么,请留言!
      • 虽然设置 CURLOPT_SSL_VERIFYHOST 是一种快速简便的解决方法,但它可能会阻止 curl 检测到“中间人”攻击。
      猜你喜欢
      • 2017-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-15
      • 1970-01-01
      • 2013-12-07
      相关资源
      最近更新 更多