Lightopenid+;谷歌应用程序&x2B;validate()=未找到任何服务器!

Lightopenid+;谷歌应用程序&x2B;validate()=未找到任何服务器!,openid,validation,google-apps,lightopenid,Openid,Validation,Google Apps,Lightopenid,我使用的是LightOpenID,并且有一个测试页面,它是示例google.php的近似副本(我加入了一些echo进行调试)。点击“谷歌登录”按钮,我就可以进入谷歌。我使用有效的Google Apps电子邮件地址登录,然后返回我的页面。但当它试图验证所声明的_id时,我得到一个“找不到服务器!”信息 我在谷歌上搜索了这句话作为指导,但大多数回复只是指向虚假登录的链接。我深入到代码中,使用fwrites显示代码是按以下顺序执行的 (我的行号可能有点不对劲,因为我输入了所有调试代码…) 调用open

我使用的是LightOpenID,并且有一个测试页面,它是示例google.php的近似副本(我加入了一些echo进行调试)。点击“谷歌登录”按钮,我就可以进入谷歌。我使用有效的Google Apps电子邮件地址登录,然后返回我的页面。但当它试图验证所声明的_id时,我得到一个“找不到服务器!”信息

我在谷歌上搜索了这句话作为指导,但大多数回复只是指向虚假登录的链接。我深入到代码中,使用fwrites显示代码是按以下顺序执行的

(我的行号可能有点不对劲,因为我输入了所有调试代码…)

调用openid.php:validate()。在validate()中,第568行附近是这一行

$server = $this->discover($this->data['openid_identity']);
在这一行之后,$server是空的,即'''

我可以在discover($url)的开头显示变量

$url = http://<my Google Apps domain>.com/openid?id=117665028262121597341  
$url=http://.com/openid?id=117665028262121597341  
问题是调用htmlTag()时,$server没有设置在第364行(openid.php)。相同的$url被刮取为$content,但该url返回404,然后在htmlTag()中使pregs失败

$url不正确吗?它是直接从“openid_identity”设置的,我认为它来自谷歌应用程序

http://intranet.<my domain>.com/<my path>/validate.php?openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&openid.mode=id_res&openid.op_endpoint=https%3A%2F%2Fwww.google.com%2Fa%2F<my Google App domain>%2Fo8%2Fud%3Fbe%3Do8&openid.response_nonce=2010-10-25T04%3A23%3A26ZFQ4Fq3F3W1b9ug&openid.return_to=http%3A%2F%2Fintranet.<my domain>.com%2F<my path>%2Fvalidate.php&openid.assoc_handle=AOQobUeErcWBdJC6slZm3nCw_BRbvHTjpdtycleA2P89n15QCCr8fRDE&openid.signed=op_endpoint%2Cclaimed_id%2Cidentity%2Creturn_to%2Cresponse_nonce%2Cassoc_handle&openid.sig=yrja2H%2Fvufp2BqezN4NIVGA5wWM%3D&openid.identity=http%3A%2F%2F<my Google App domain>%2Fopenid%3Fid%3D117665028262121597341&openid.claimed_id=http%3A%2F%2F<my Google App domain>%2Fopenid%3Fid%3D117665028262121597341
以下是成功登录谷歌应用程序后返回的URL

http://intranet.<my domain>.com/<my path>/validate.php?openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&openid.mode=id_res&openid.op_endpoint=https%3A%2F%2Fwww.google.com%2Fa%2F<my Google App domain>%2Fo8%2Fud%3Fbe%3Do8&openid.response_nonce=2010-10-25T04%3A23%3A26ZFQ4Fq3F3W1b9ug&openid.return_to=http%3A%2F%2Fintranet.<my domain>.com%2F<my path>%2Fvalidate.php&openid.assoc_handle=AOQobUeErcWBdJC6slZm3nCw_BRbvHTjpdtycleA2P89n15QCCr8fRDE&openid.signed=op_endpoint%2Cclaimed_id%2Cidentity%2Creturn_to%2Cresponse_nonce%2Cassoc_handle&openid.sig=yrja2H%2Fvufp2BqezN4NIVGA5wWM%3D&openid.identity=http%3A%2F%2F<my Google App domain>%2Fopenid%3Fid%3D117665028262121597341&openid.claimed_id=http%3A%2F%2F<my Google App domain>%2Fopenid%3Fid%3D117665028262121597341
http://intranet..com//validate.php?openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&openid.mode=id_res&openid.op_endpoint=https%3A%2F%2Fwww.google.com%2Fa%2F%2Fo8%2Fud%3Fbe%3Do8&openid.response_nonce=2010-10-25T04%3A23%3A26ZFQ4Fq3F3W1b9ug&openid.return_to=http%3A%2F%2ftranet..com%2F%2ffalidate.php&openid.assoc_handle=aoqobuercwbdjc6slZm3nCw\u BRbvHTjpdtycleA2P89n15QCCr8fRDE&openid.signed=op\u端点%2cclaid\u id%2Cidentity%2Cresponse\u当前%2Cassoc\u句柄和openid.sig=yrja2H%2fuvufp2bqezn4nivga5wwm%3D&openid.identity=http%3A%2F%2F%2F%2Fopenid%3Fid%3Fid%3d1176502821597341&openid.claid\u id=http%3A%2F%2F%2F%3Fid%3Fid%2f11766273627341
我对OpenID还不熟悉,所以如果您能给我一个短语或链接,为我指明正确的方向,我将不胜感激

谢谢, Eric B.

(我的第二个答案)Mewp再次通过。我明白了。谢谢你的清楚解释。我会和我们的谷歌账户代表联系,看看他们传递回来的URL是怎么回事

保重,, 埃里克B

(我的第一个答案) 谢谢你,Mewp,LightOpenID先生本人!(尽管在你的网站上没有提到性别)

如果openid.mode是id_res,那么使用声明的_标识是否足够好/安全,而不必通过validate()?跳过名为“验证”的内容似乎是错误的,但我得到并粘贴在原始帖子中的URL响应与成功登录和确认的Google示例响应相匹配,如下所示:

谢谢,
Eric B.

虽然我对谷歌应用了解不多,但身份url必须是可发现的,即包含有关openid服务器的信息。因此,如果它返回404,LightOpenID无法发现服务器,因此无法执行验证。如果跳过validate(),我可以复制粘贴google的响应,以获取任何标识符,并且您必须假设我是google。这是这样的:你的服务器收到一个请求,上面写着“我是谷歌,我想告诉你这个人是经过身份验证的”,但你不知道是谁这么说的。所以你必须问谷歌,它是否真的发送了请求,这就是validate所做的。这就是为什么标识符必须是可发现的——为了能够询问对其进行身份验证的服务器,它是否真的发送了请求。