問題我試圖讓LightOpenID與Google Apps企業版帳戶一起使用。我得到「找不到服務器!」當我調用validate()。我嘲笑了一個快速頁面來測試LightOpenID的每一步,並且我得到了更遠一點,現在總是得到「is_valid:false」。最後一步的OpenID驗證,總是返回「is_valid:false」
我已經這樣做了遠東 在通過驗證工作(),並探索線()行,我注意到,某些openid->數據[](認爲「openid_ *」)值並沒有使它到最後的參數數組(認爲「openid。*」),所以在我的例子中,我明確地編碼了它們。 我不知道我是否總是得到is_valid:false,因爲我缺少一個openid。 東西的價值,或者如果因爲OpenID說提供者只應該驗證每個nonce一次或別的東西。
你如何幫助我如果你已經得到這麼多,我可以使用兩件事情之一。要麼在我的示例代碼中指出錯誤,要麼給我一個你用來測試這種事情的過程。每次我想測試驗證/驗證步驟時,是否真的必須註銷/返回?有什麼工具或流程可以加速這種修補嗎?
示例代碼我用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();
}
謝謝,MEWP!直接從源頭上。不幸的是,我正在使用Intranet。 .com並沒有直接訪問 .com是否可以regsub openid.identity到內聯網。 .com?id = 123並在Intranet上承載openid文件。 .com?它還沒有工作,我擔心Google OpenID簽名字段與 .com綁定。謝謝。 –
2011-04-12 23:01:42
Google將以https:// {$ site_xrds}/openid?[...]'形式返回身份。不幸的是,如果此網址沒有XRDS文檔,則無法驗證Google是否有權返回該身份。所以要麼將你的site-xrds改成intranet。或者說服誰控制 .com將X-XRDS-Location標頭置於'/ openid'中。 –
Mewp
2011-04-13 09:38:34