OpenID验证的最后一步,始终返回"is_valid:false"



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

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

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

示例代码 我用 example.com 替换了我的域。 如果您需要任何输出,请告诉我。谢谢,埃里克·

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 "nn tBody2: ".$tBody2." nn";
    }
} catch(ErrorException $e) {
    echo $e->getMessage();
}

LightOpenID正在您的服务器上查找/openid以搜索XRDS文档。

在响应/openid文档的任何内容中添加以下内容:

<?php
  header('X-XRDS-Location: https://www.google.com/accounts/o8/site-xrds?hd=example.com');
?>

在您尝试登录后的原因在中,谷歌返回一个身份。必须发现此标识,才能查看它是否指向有效的 OpenID 提供程序(因此它不是欺骗他们)。由于 Gogole 返回您域中的身份,因此您必须添加谷歌有权发布它们的信息。信息必须在/openid,因为标识的形式为:http://example.com/openid?[...] 。否则,LightOpenID会打开该网址,看不到任何指向任何内容的内容。服务器,并返回"未找到服务器!

嗨,我

遇到了同样的问题并:)解决它,您应该需要禁用安全模式:关闭,这对我有用:)

相关内容

  • 没有找到相关文章

最新更新