问题我正在尝试让LightOpenID与Google Apps Enterprise帐户配合使用。我得到“没找到服务器!”当我调用validate()时。我嘲笑了一个快速页面来测试LightOpenID的每一步,我已经变得更远,现在总是得到“is_valid:false”。
我做得很远 在逐行处理validate()和discover()时,我注意到某些openid-> data [](想想“openid_ *”)值没有进入最终的params数组(想想“openid。*”)所以在我下面的例子中,我明确地编写了这些。 我不知道我是否总是得到is_valid:false因为我错过了一个openid。某些值或者因为OpenID说提供者只应该验证每个nonce一次或其他什么。
你如何帮助我如果你已经走到这一步,我可以使用两件事之一。要么在我的示例代码中指出错误,要么给我一个你用来测试这种事情的过程。每次我想测试验证/验证步骤时,是否真的必须注销/返回?是否有任何工具或流程可以加速这种修补?
示例代码我用example.com替换了我的域名。如果您想要任何输出,请告诉我。 谢谢,Eric B.
try {
$openid = new LightOpenID;
if(!$openid->mode) {
if(isset($_GET['login'])) {
//$openid->identity = 'https://www.google.com/accounts/o8/id';
$openid->identity = 'https://www.google.com/accounts/o8/site-xrds?hd=example.com';
header('Location: ' . $openid->authUrl());
}
?>
<form action="?login" method="post">
<button>Login with Google</button>
</form>
<?php
} elseif($openid->mode == 'cancel') {
echo 'User has canceled authentication!';
} else {
$tClaimedID = 'https://www.google.com/a/example.com/o8/ud?be=o8';
$openid->data['openid_claimed_id'] = $tClaimedID;
foreach (explode(',',$openid->data['openid_signed']) as $item) {
$value = $openid->data['openid_'.str_replace('.','_',$item)];
$params['openid.'.$item] = get_magic_quotes_gpc()?stripslashes($value):$value;
}
$params['openid.mode'] = 'check_authentication';
$params['openid.ns'] = $openid->data['openid_ns'];
$params['openid.signed'] = $openid->data['openid_signed'];
$params['openid.sig'] = $openid->data['openid_sig'];
$tBody2 = $openid->request($tClaimedID,'POST',$params);
echo "\n\n tBody2: ".$tBody2." \n\n";
}
} catch(ErrorException $e) {
echo $e->getMessage();
}
答案 0 :(得分:2)
LightOpenID正在您的服务器上寻找/openid
以搜索XRDS文档。
在对/openid
文档的任何响应中添加以下内容:
<?php
header('X-XRDS-Location: https://www.google.com/accounts/o8/site-xrds?hd=example.com');
?>
您尝试登录后的原因
在,谷歌返回一个身份。必须发现这种身份
看它是否指向有效的openid提供者(所以它不是
欺骗他们)。由于Gogole会返回您域中的身份,因此
必须添加Google授权发布的信息。
信息必须位于/openid
,因为
身份的形式为:http://example.com/openid?[...]
。
否则,LightOpenID打开该url,看不到任何指向任何url
服务器,并返回“找不到服务器!”。
答案 1 :(得分:0)
您好我面临同样的问题并解决它:),您应该需要禁用安全模式:关闭,这对我有效:)