質問

使っています Janrain の PHP-OpenID 2.1.3, そして、GoogleとYahooを除く、私が試したすべてのプロバイダーでなんとか動作させることができました。ここでの主な違いは、他のほとんどのプロバイダーとは異なり、Google と Yahoo はユーザー固有の URL を使用せず、ユーザー検出フレームワークをすべて自社側に備えていることです。これにより、デフォルトの Janrain フレームワークがループにスローされ、その後、認証リクエストを開始しようとします。

私が見たところによると、おそらく YADIS ディスカバリーがエラーをスローしているようです。ディスカバリーは Google または Yahoo 側にあるため、回避できるはずですが、よくわかりません。これはすべて私にとって非公式の大きな学習経験ですが、これについて役立つドキュメントを見つけるのに苦労しました。ヒントをいただければ幸いです。

編集: 私が抱えている具体的な問題は、Google または Yahoo URL に対して begin() 関数が呼び出されたときに null が返されることです。この関数は参照用に Auth/OpenID/Consumer.php にあります。

役に立ちましたか?

解決

[OK]を、私は最終的に、ライブラリを修正するようになった...私はすべて<のhref = "http://sourcecookbook.com/en/recipes/60/janrain-s-php-openid-library-fixed-forを説明しました-php-5-3-と-方法-I-それやったここを」REL = "noreferrerを">(あなたも私の変更後のphp-openidのライブラリをダウンロードすることができます)。

私はポールTarjanが示唆されたが、また、私はAuth_OpenID_detectMathLibraryを変更し、機能の多くにstaticキーワードを追加するために必要なものを行うために必要な。それは、それは理想的なソリューションではありませんが、完璧に動作するように思われることの後...私は誰かがPHP 5でライブラリ全体を書き換える必要があることだと思う...

他のヒント

私は、Windows XPで同じ問題を抱えていました。カール拡張子を活性化させることによって修正されました。 php.iniの行をコメント解除これを行うには、

extension=php_curl.dll

を除去することにより、もしあればその前に。 Apacheを再起動します。

また、Windows上では、Windowsで使用すると、ランダムなソースを持っていないので、NULLとしてAuth_OpenID_RAND_SOURCEを定義する必要が正常に動作します。あなたが行を追加することによってこれを行うことができます。

define('Auth_OpenID_RAND_SOURCE', null);

CryptUtil.phpにおける最初のコード行前

if(!defined('Auth_OpenID_RAND_SOURCE')){

カールがAPIを有効にしていない場合であっても、HTTP経由でcommunicatする代わりにAuth_Yadis_PlainHTTPFetcherを使用して動作するはずです。 OPEN_SSLは(Auth_Yadis_PlainHTTPFetcher :: supportsSSLがtrueを返す必要があります)が有効になっている場合にのみ動作しますので、GoogleとYahooの場合には、あなたは、HTTPSを必要とします。

私は正確に同じ問題を抱えていたし、それが問題を追跡するために、ほぼ2時間かかりました。ヤン雨のOpenID libには、「DOMやdomxml PHPのXML」(https://github.com/openid/php-openid)が必要ですが、どちらも利用可能であるとき、それは静かに失敗します!

私のCentOSのインストールシンプルでます:

yum install php-xml

は、(私はこのレポを使用しています問題を修正: http://blog.famillecollet.com /ページ/コンフィギュレーション・アンの)ます。

このライブラリは、YahooとGoogleでうまく動作するはずです。あなたはこのライブラリは、オンラインデモを参照して使用して自分でそれを試してみることができます"yahoo.com" または「 https://www.google.com/accounts/o8/idこれら二つのOPに対してそれをテストするを」ます。

Googleは、彼らはまだベータ版だと、まだ単なる「google.com」であることを彼らのOP識別子をプッシュしていないので、入力する識別子に沿っています。

あなたは例のRPを使用していますか?私はあなたが http://trac.openidenabled.comで詳細なバグを提出する提案することができます/ tracの/ newticket?プロジェクト=のphp-openidののか、メーリングリストを通じて詳細な問い合わせます。

正しく実装されていれば、

immediate_modeサポートは、実際にライブラリを動作しません。 I(その他)も#openidにおけるOpenIDのIRCチャンネルirc.reenode.netであなたを助けて幸せになります。私のニックネームは弛緩されます。

ウェブサーバの再起動は、グーグル/ヤフーの問題を解決:私は(CA-証明書をインストールapt-getのシステムのようなDebianの上で)CA-証明書パッケージをインストールするために -

私は、証明書の一部については同意します。ない私の考えが、代わりにはhref="https://stackoverflow.com/questions/818063/why-doesnt-google-openid-provider-work-with-php-openid-on-my-server">にの: - )

あなたはカールサポートは、PHPで有効に有効になっていませんので、

それはです。これがなければ、それは、HTTPSコンテンツを取得することはできません。少なくとも、それは私が発見したものです。私はヤフーやグーグルを取得しようとすると、エラーメッセージ「認証エラー;無効のOpenID、」で失敗しましたが、私はphp_curlを有効にすると、それが正常に動作する

サーバーがhttpsプロトコルでカール有効になっていることを確認してください。これは私のためにそれを解決します。

このスレッドを参照してください。

ここでそれをテストするための簡単なスクリプトです。その後、ブラウザを経由して、それをacccessサーバー上でアップロードします。

<?php
error_reporting(E_ALL);
// create curl resource
$myurl = 'https://<YOURACCOUNT>.myopenid.com';
$curl_handle=curl_init();
curl_setopt($curl_handle,CURLOPT_URL, $myurl);
curl_setopt($curl_handle,CURLOPT_CONNECTTIMEOUT,2);
curl_setopt($curl_handle,CURLOPT_RETURNTRANSFER,1);
$buffer = curl_exec($curl_handle);


if (empty($buffer))
{
    print "Sorry, cannot access $myurl .<p>". curl_error($curl_handle);
}
else
{
    print $buffer;
}

curl_close($curl_handle);


?>

が、それは、あなたが何をすべきか知っている「プロトコルがサポートまたはlibcurlの中に無効になっていないhttps」を返します。

私は自分のGmailアカウントを使用して、それを試してみましたが、それは動作しますが、それは理にかなって301永久rediretにつながります。

私は、最新のライブラリをダウンロードし、ヤフーを使用したとき、私は同じ失敗した結果を得ます!私はGoogleにしようとしなかった。

私は http://www.yahoo.com に使用しようとすると、

私は、認証が失敗したというエラーを取得しますが、それは私の正しいme.yahoo.comのURLを返します。私は私のme.yahoo.comのURLを使用してログインしようとした場合、私は有効なOpenIDのURLを入力するようにというエラーを取得します。

別の潜在的な違いは、GoogleとYahooはあなたのPHPやSSLインストールが誤って構成されている場合(おそらく不足しているCA証明書)HTTPSを使用して、あなたのOpenIDのコードがアソシエーションを確立するために失敗したり、check_authenticationのコールを完了するということです。

しかし、エラーメッセージやログなしで、私は本当にあなたが見ている、障害の種類を教えてくれないことができます。

数年遅すぎましたが、これは、 ジャンレイン PHP OpenID 2.2.2 Windows プラットフォーム上のライブラリ。私はまだ PHP 5.2.17 を使用しています。

ライブラリが Google に接続していることを確認するための私の簡単なテストは、examples/discover.php プログラムを使用し、Google の OpenID URL (https://www.google.com/accounts/o8/id).

指示に従って、標準的な手順は、GMP (拡張機能 = php_gmp.dll のコメントを解除) と CURL (拡張機能 = php_curl.dll のコメントを解除) を有効にすることです。XML はすでに有効になっているはずです。

contrib/google でパッケージを抽出し、google_discovery.php と ca-bundle.crt が Auth/OpenID にあることを確認する必要がある場合もあります。

さらに偏執的な人は、物事が正しく設定されていることを確認するために、examples/detect.php から始める可能性があります。暗号化ランダム性テストを除くすべてのテストに合格することが期待されます。このためには、以下を追加する必要があります

define('Auth_OpenID_RAND_SOURCE', null);

Examples/detect.php の先頭に移動します。その間に、それを example/consumer/common.php に追加します (examples/discover.php が使用するため)。

さて、これだけの作業を行ったにもかかわらず、Google OpenID URL の検出は失敗していました。私は得ていました CURL error (60): SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed PHPエラーログにあります。

Windows環境では、CURLOPT_CAINFOの定義が必要です。簡単なテストのために、次のように追加しました curl_setopt($c, CURLOPT_CAINFO, dirname(__FILE__)."/../OpenID/ca-bundle.crt"); Auth/Yadis/ParanoidHTTPFetcher.php のcurl_exec() ステートメントの前。

これにより、examples/discover.php は Google URL によって提供されるサービスを検出できるようになりました。

Windows で CURLOPT_CAINFO を設定するための長期的な解決策として、以下を参照するとよいでしょう。 この StackOverflow の回答 php.ini に設定を追加できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top