2011-04-05 4 views
3

Задача Я пытаюсь заставить 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(); 
} 

ответ

2

LightOpenID ищет /openid на сервере в поисках документа XRDS.

Добавьте следующее в любых откликается на ваш /openid документа:

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

Причина, что после того, как вы пытаетесь войти в , Google возвращает идентификатор. Эта идентификация должна быть обнаружена: посмотреть, указывает ли она на действительный провайдер openid (так что это не , подменяющий их). Поскольку Gogole возвращает идентификаторы в вашем домене, вы должны добавить информацию, которую Google имеет право на их выпуск. Информация должна быть в /openid, так как личность находится в форме: http://example.com/openid?[...]. В противном случае LightOpenID открывает этот URL-адрес, не видит ничего, указывающего на какой-либо сервер , и возвращает «Серверы не найдены!».

+1

Спасибо, Mewp! Прямо от источника. К сожалению, я работаю над интрасети. .com и не имеют прямого доступа к ...... Это нормально для regsub openid.identity для интранета. .com? Id = 123 и размещать файл openid в интрасети. .com? Он пока не работает, и я обеспокоен тем, что поля, подписанные Google OpenID, привязаны к .com. Благодарю. –

+1

Google вернет идентификатор в форме 'https: // {$ site_xrds}/openid? [...]'. К сожалению, если на этом URL-адресе нет документа XRDS, невозможно проверить, имеет ли Google право вернуть это удостоверение. Поэтому либо измените свой сайт-xrds на интранет. .com, или убедить любого, кто имеет контроль над .com, разместить заголовок X-XRDS-Location в '/ openid'. – Mewp

0

Привет Я перед той же проблемой и решить ее :), если вам нужно отключить безопасный режим: выключен, что работает для меня :)