LightOpenID validate() 在 Google Apps 上失败
Posted
技术标签:
【中文标题】LightOpenID validate() 在 Google Apps 上失败【英文标题】:LightOpenID validate() fail on Google Apps 【发布时间】:2011-07-24 16:44:16 【问题描述】:我正在使用 LightOpenID 针对 Google Apps 对 OpenID 进行身份验证。我提出了最初的 authURL() 请求,一切都很好。我调用 validate() 并且它失败了。通过大量的回声,我将其追踪到 validate() 的最后几行。
从 validate() 中,传入 discover($url) 的 url 是 https://www.google.com/accounts/o8/user-xrds?uri=http://my-domain.com/openid?id=117665028262121597341
discover() 首先检查不存在的 xrds 位置。 discover() 接下来检查内容类型是否为 xrds+xml,这是真的。 discover() 检查 Service(.*)/Service,这是真的。这里是Service的sn-p,/Service
<Service priority="0">
<Type>http://specs.openid.net/auth/2.0/signon</Type>
<Type>http://openid.net/srv/ax/1.0</Type>
<Type>http://specs.openid.net/extensions/ui/1.0/mode/popup</Type>
<Type>http://specs.openid.net/extensions/ui/1.0/icon</Type>
<Type>http://specs.openid.net/extensions/pape/1.0</Type>
<URI>https://www.google.com/a/<my domain>.com/o8/ud?be=o8</URI>
</Service>
discover() 发现我们正在使用 OpenID 2 并将 URI 字段提取到 $server 变量中。 discover() 继续提取 CanonicalID,发现 Google 支持 AX 而不是 SREG。最后,discover() 返回 $server 为https://www.google.com/a/my-domain.com/o8/ud?be=o8
validate() 继续清理 data[] 中的每个字段,这取决于是否使用 magic_quotes。它将 openid.mode 设置为“check_authentication”,请求由 discover($url) 返回的 $server 和 preg 的“/is_valid:true”。正是这最后一个 preg_match 失败了。 $server url 不返回验证,而是说:“您请求的页面无效。”
我正在寻找的答案是 Google Apps 验证的正确网址。紧随其后的是 url 应该是什么样子,我将挖掘 Google Apps 返回的信息,看看我是否有类似的东西。
添加:不确定这是否重要,但我确实有一个 /.well-known/host-meta 文件。以下是内容:
Link: <https://www.google.com/accounts/o8/site-xrds?hd=my-domain.com>; rel="describedby http://reltype.google.com/openid/xrd-op"; type="application/xrds+xml"
如果您需要更多代码或数据,请告诉我。
谢谢, 埃里克 B.
【问题讨论】:
我在使用 Google Apps 和 LightOpenId 时遇到了同样的问题...不过最近才开始发生。 现在我回来了,差不多一年后,同样的问题。我几乎记得去年是什么让这个问题消失了 - 再次尝试谷歌搜索,看看它把我带到了哪里...... 一些可能的答案:***.com/questions/3995011/…***.com/questions/14752715/… 【参考方案1】:确保您的服务器上已安装 php curl 扩展。我们最近在生产中遇到了完全相同的症状,这与服务器配置问题有关。
如果您在 Debian 上运行应用程序,只需使用:
apt-get install php5-curl
【讨论】:
以上是关于LightOpenID validate() 在 Google Apps 上失败的主要内容,如果未能解决你的问题,请参考以下文章
为啥模型字段验证发生在 validate 或 validate_<field> 被调用之前?
为啥jquery-validate rule放在validate()里面不生效?