Задача Я пытаюсь заставить LightOpenID работать с учетной записью Google Apps Enterprise. Я получаю «Нет серверов!» когда я вызвал validate(). Я высмеял быструю страницу, чтобы протестировать каждый шаг LightOpenID, и я получил немного дальше, теперь всегда получаю «is_valid: false».Последний шаг проверки OpenID, всегда возвращаемый «is_valid: false»
Что я сделал So Far При работе через Validate() и открыть линию() по линии, я заметил, что некоторые openid-> данные [] (думаю, что «openid_ *») значения не делает его в окончательный массив params (подумайте «openid. *»), поэтому в моем примере ниже я закодировал их явно. Я не могу сказать, всегда ли я получаю is_valid: false, потому что мне не хватает openid. что-то значение, или если, поскольку OpenID говорит, что поставщик должен только проверять каждый нечет один или что-то еще.
Как вы можете мне помочь Если вы дошли до этого, я мог бы использовать одну из двух вещей. Либо укажите ошибку (-ы) в моем примере кода, либо дайте мне процесс, который вы использовали для проверки такого рода вещей. Действительно ли мне нужно выйти/вернуться в каждый раз, когда я хочу проверить шаг проверки/проверки? Есть ли какие-либо инструменты или процессы, которые ускоряют этот способ?
ПРИМЕР КОД Я заменил свой домен 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();
}
Спасибо, Mewp! Прямо от источника. К сожалению, я работаю над интрасети. .com и не имеют прямого доступа к ...... Это нормально для regsub openid.identity для интранета. .com? Id = 123 и размещать файл openid в интрасети. .com? Он пока не работает, и я обеспокоен тем, что поля, подписанные Google OpenID, привязаны к .com. Благодарю. –
Google вернет идентификатор в форме 'https: // {$ site_xrds}/openid? [...]'. К сожалению, если на этом URL-адресе нет документа XRDS, невозможно проверить, имеет ли Google право вернуть это удостоверение. Поэтому либо измените свой сайт-xrds на интранет. .com, или убедить любого, кто имеет контроль над .com, разместить заголовок X-XRDS-Location в '/ openid'. –
Mewp