3

问题 我正在尝试让 LightOpenID 与 Google Apps Enterprise 帐户一起使用。我收到“未找到服务器!” 当我调用 validate() 时。我模拟了一个快速页面来测试 LightOpenID 的每一步,我已经走得更远了,现在总是得到“is_valid:false”。

到目前为止我所做 的在逐行处理 validate() 和 discover() 时,我注意到某些 openid->data[](认为“openid_*”)值没有进入最终的 params 数组(认为"openid.*") 所以在我下面的例子中我明确地编码了这些。我不知道我是否总是得到 is_valid:false 因为我缺少一个 openid。一些价值,或者如果因为 OpenID 说提供者只应该验证每个随机数一次或其他东西。

你能如何帮助我 如果你已经走到这一步,我可以使用两件事之一。要么指出我的示例代码中的错误,要么给我一个你用来测试这类事情的过程。每次我想测试验证/验证步骤时,我真的必须注销/重新登录吗?是否有任何工具或流程可以加速这种修补?

示例代码我用 example.com 替换了我的域。如果您想要任何输出,请告诉我。谢谢,埃里克 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();
}
4

2 回答 2

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,看不到任何指向任何服务器的内容,并返回“未找到服务器!”。

于 2011-04-06T20:03:14.900 回答
0

嗨我面临同样的问题并解决它:),你应该需要禁用安全模式:关闭,这对我有用:)

于 2013-05-11T12:47:55.183 回答