2011-04-05 11 views
3

問題 LightOpenIDをGoogle Apps Enterpriseアカウントで使用するようにしようとしています。私は「サーバが見つかりません!」となっていました。私がvalidate()を呼んだとき。私は、LightOpenIDの各ステップをテストするための簡単なページを嘲笑しました。もう少し進んでいますが、現在は常に「is_valid:false」になっています。私は(検証を通じて取り組んでこれまでに を完了)し、線で()の行を発見しました何OpenID検証の最後のステップは、常に "is_valid:false"を返す

、私は特定のopenid-は>データ[](「* openid_」を考える)の値がそれを作っていなかったことに気づきました最終的なparams配列( "openid。*"と思う)に入れてください。下の私の例では、明示的にそれらをコード化しています。 openidがないので、私はいつもis_valid:falseになっているのかどうかはわかりません。 何か値があるか、OpenIDがプロバイダに一度だけまたは他の何か他のものを妥当性検査すると言われているからです。

あなたが私に助けてくれる方法これまでに得たことがあれば、私は2つのうちの1つを使うことができました。サンプルコードの間違いを指摘するか、このようなことをテストするために使用したプロセスを私に教えてください。検証/検証手順をテストするたびにログアウト/バックアップする必要がありますか?このような不具合を早めるツールやプロセスはありますか?

例コード私はドメインを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(); 
} 

答えて

2

LightOpenIDはXRDSドキュメントの検索では、サーバー上/openidを探しています。

あなた/openid文書にどのような応答に以下を追加します。あなたが を記録しようとした後、Googleはアイデンティティを返すこと

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

理由、それは。このアイデンティティは、 が偽装されていないように、有効なopenidプロバイダを指しているかどうかを確認するために、発見されなければなりません( )。 Gogoleはあなたのドメイン内のアイデンティティを返すので、 には、Googleがそれらを発行する権限を持つ情報を追加する必要があります。 のIDはhttp://example.com/openid?[...]の形式であるため、情報は/openidである必要があります。 そうでない場合、LightOpenIDはそのURLを開き、 サーバを指す何も見ず、「サーバが見つかりません!」と返します。

+1

おかげで、Mewp!ソースからまっすぐ。残念ながら、私はイントラネットで作業しています。 .comと直接アクセスできない .com openid.identityをイントラネットに登録することは可能ですか? .com?id = 123とイントラネット上のopenidファイルをホストします。 .com?それはまだ働いていないと私はGoogle OpenIDの署名フィールドが .comに縛られていることを心配しています。ありがとう。 –

+1

Googleは、フォームを 'https:// {$ site_xrds}/openid?[...]'形式で返します。残念ながら、このURLにXRDSドキュメントがない場合、GoogleにそのIDを返す権利があることを確認することはできません。したがって、サイトxrdsをイントラネットに変更してください。 .com、または .comの制御権を持っている人を説得し、X-XRDS-Locationヘッダーを '/ openid'に置く。 – Mewp

0

私は同じ問題に直面し、それを解決していますこんにちは:)、あなたがセーフモード無効にする必要がある必要があります:オフ、それは私のために働いています:)

関連する問題