OpenIDライブラリ
- ダウンロード
- md5ハッシュ
- インストール
本パッケージは、「janrain社」が提供する「php-openid」ライブラリを CodeIgniterから簡単に利用するためのライブラリです。
本パッケージのライブラリを利用することで、「RP(Relying Party)」、つまり、OpenIDでログインできる
サイトを構築することができます。
以下の「OP(OpenID Provider)」で、OpenID認証の動作確認を行なっております。
- Demo
OpenIDライブラリの準備
Janrain OpenID Libraries をインストール
「Janrain OpenID Libraries」は、PHPで利用可能なOpenIDライブラリです。
「GitHub」からダウンロードして、サーバに配置します。
今回は、「application/」ディレクトリに「includes」ディレクトリを作成して、そこに配置することにします。
mkdir includes
cd includes/
wget https://github.com/openid/php-openid/archive/master.zip -O php-openid-master.zip
unzip php-openid-master.zip
本サイトの「third_party」パッケージをインストール
「info.ci-guide.openid.1.x.x.zip」を「application/third_paty/」ディレクトリに置き、解凍します。
unzip info.ci-guide.openid.1.x.x.zip
パッケージパス
パッケージパスを「application/config/autoload.php」
自動ロード設定ファイルで設定するか、
「CI_Loader」コアクラスの「add_package_path()」
メソッドで「info.ci-guide」パッケージのパスを設定します。
- application/config/autoload.php
- add_package_path()
OpenIDライブラリ設定
設定ファイルでは、複数の「OP」を定義できるように、詳細設定項目は2次元連想配列で設定します。
1次元の連想配列キーに「OP設定識別子」を定義し、2次元の連想配列キーを設定項目として詳細設定を定義します。
- 設定例
$config['openid_provider'] = 'google_openid'; $config['google_openid']['openid_identifier'] = 'https://www.google.com/accounts/o8/id'; $config['google_openid']['openid_form_id'] = 'openid_message'; $config['google_openid']['openid_realm'] = '/openid/google/'; $config['google_openid']['openid_return_to'] = '/openid/google/return_to/'; $config['google_openid']['openid_filestore_path'] = '/tmp/openid'; $config['google_openid']['openid_assoc_type'] = NULL;
php_openid_path |
Janrainのphp-openidライブラリを配置したPATHを設定します。 例: APPPATH . '/includes/php-openid-master' |
openid_provider | デフォルトの「OP設定識別子」を設定します。複数の「OP」に対し、詳細設定項目を定義できるようになっています。 |
openid_identifier | OP IdentifierのURIを設定します。 |
openid_form_id | 認証要求<form>タグの「id=」属性値を設定します。 |
openid_realm | レルムを設定します。URIパスのみ設定すると、site_url()で返るURLが付加されます。 |
openid_return_to | 戻りURIを設定します。URIパスのみ設定すると、site_url()で返るURLが付加されます。 |
openid_filestore_path | 認証情報をキャッシュする保存ディレクトリを設定します。書き込み権限が必要です。 |
openid_assoc_type |
アソシエーション形式、及び、アソシエーションセッション形式を配列で設定します。暗号化しない場合はNULLを設定します。 例: array('HMAC-SHA256', 'DH-SHA256') |
openid_xrds |
OPが 「RP Discovery」を行う場合、「XRDS」応答を行うURIを設定します。 OPからのレルムURIへの「RP Discovery」リクエストに対するレスポンス時に「X-XRDS-Location:」HTTPヘッダの値として出力します。 OPが 「RP Discovery」を行わない場合この設定を定義する必要はありません。 |
OpenIDライブラリのロード
本パッケージがロードされていれば、通常のライブラリと同様に、 「Loadオブジェクト」の「library()」メソッドでロードすることができます。
$this->load->library('cig_openid');
また、設定情報をロード時にコンストラクタに渡すことも可能です。
$config['openid_identifier'] = 'https://www.google.com/accounts/o8/id'; $config['openid_form_id'] = 'openid_message'; $config['openid_realm'] = '/openid/google/'; $config['openid_return_to'] = '/openid/google/return_to/'; $config['openid_filestore_path'] = '/tmp/openid'; $config['openid_assoc_type'] = NULL; $this->load->library('cig_openid', $config);
OpenIDライブラリの利用
initialize($config = array())
設定情報を動的に初期化します。
$this->load->library('cig_openid'); $config['openid_provider'] = 'docomo'; $config['openid_identifier'] = 'https://i.mydocomo.com'; $config['openid_form_id'] = 'openidparam'; $config['openid_realm'] = '/openid/docomo/'; $config['openid_return_to'] = '/openid/docomo/return_to/'; $config['openid_filestore_path'] = '/tmp/openid'; $config['openid_assoc_type'] = array('HMAC-SHA256', 'DH-SHA256'); $config['openid_xrds'] = '/openid/docomo/xrds/'; $this->cig_openid->initialize($config);
set_provider($provider)
設定ファイル「third_party/info.ci-guide/config/cig_openid.php」に定義してある設定情報に初期化します。
設定ファイルに定義済みの「OP設定識別子」を引数に指定します。
try_auth()
「OP Identifier」に「OP Discovery」リクエストをし、クライアントが認証要求するための 「OP End Point URL」を取得しリダイレクト「HTML FORM」を生成して返します。
if ($html = $this->cig_openid->try_auth()) { $this->output->set_output($html); } else { // エラー処理 }
finish_auth()
「return_to」の戻りURIでリクエストを受けた際に、このメソッドを実行するとユーザの「OpenID」を取得することができます。
if ($openid = $this->cig_openid->finish_auth()) { // $openid を利用してログイン処理を行う } else { // エラー処理 }
set_xrds_location()
OP が 「RP Discovery」リクエストしてくる場合、レルムとして設定したメソッドで 「X-XRDS-Location: 」HTTPヘッダを出力する必要があります。
「set_xrds_location()」は、設定項目「openid_xrds」で設定したURIを出力します。
$this->cig_openid->set_xrds_location();
xrds($return_to = NULL, $output = TRUE)
OP からの 「RP Discovery」要求に対し、「XRDS」データを出力します。
設定項目「return_to」で設定した戻りURIとは別の戻りURIを指定したい場合は、 第一引数に「戻りURI」を指定することができます。
第二引数に「FALSE」を指定するとXRDSデータを出力せずに、返します。
echo $xrds;
flush();
// 重たい処理
docomo(ドコモ docomo ID)では、RP Discovery の応答が必須となっていますので、このメソッドで XRDS を出力してください。
OpenIDライブラリのSample
本パッケージ内にサンプルプログラムを用意していますので、動作確認や開発の参考にご利用ください。
「samples/openid/」ディレクトリを、「application/contorllers/」ディレクトリ直下にコピーしてください。
cp -ir third_party/info.ci-guide/samples/openid controllers/
下記のようなURIパスにアクセスするとデモページが表示されます。