まちゅダイアリー

PHP OpenID を使う

2007-06-06

PukiWiki で OpenID を使ってみたい。 具体的には以下のようなことを考えている。

思っていたよりも Akismet による誤判定が多かったのが理由。 まぁ、 Wiki はコメントと違って、ページ全体が SPAM チェックの対象になっちゃうからなぁ。

ってことで、まずは OpenID のライブラリの使い方から。

ダウンロード&インストール

About - OpenID Enabledより PHP 用の OpenID ライブラリを取得する。 PEAR が使えない環境なので、手動で取得・展開する。

$ wget http://www.openidenabled.com/resources/downloads/php-openid/PHP-openid-1.2.2.tar.gz
$ tar zxvf PHP-openid-1.2.2.tar.gz
$ cd PHP-openid-1.2.2
$ ls
Auth/      COPYING  README.Debian  Tests/  doc/       package.xml
CHANGELOG  README   Services/      admin/  examples/  package2.xml

とりあえず大切なのは以下のファイルやディレクトリかな。

examples には consumer と server の 2 つのディレクトリがある。 今回は認証サーバを立てるつもりはないので、 consumer を使う。 examples/README を読みながら、セットアップ開始。

セットアップ

ライブラリとサンプルプログラムを配置する。 以下は悪い例。本当はライブラリは public_html に置かない方がよい。

$ mkdir ~/public_html/openid
$ mv Auth Services ~/public_html/openid       ← 必要なライブラリをコピー
$ mv example/consumer/* ~/public_html/openid  ← サンプルプログラムをコピー

example/consumer には以下のファイルが含まれている。

$ ls examples/consumer
common.php  finish_auth.php  index.php  try_auth.php

それぞれのファイルの役割は以下の通り。

元々の finish_auth.php だと index.php の include に失敗するので、下記のように修正する。

-include 'index.php';
+include './index.php';

これで設置完了。 試しに使ってみたところ、 videntity.org では認証できた。 でも TypeKey ではログイン後に以下のようなエラーになってしまう。

Warning: No HTTP code returned in /home/machu/www/www.machu.jp/openid/Services/Yadis/Pa ranoidHTTPFetcher.php on line 154
OpenID authentication failed: Server denied check_authentication

認証サーバ (TypeKey) への接続に失敗しているっぽいけどよく分からない。 認証サーバから戻ってきたとき (finish_auth.php) も、サーバ間で通信しているのかな?

ちなみに、 TypeKey での OpenID アカウントは下記の通り。 ドキュメントは見つからなかったけど、 TypeKey のプロフィールページに openid の META タグが含まれていることから分かった。

profile.typekey.com/[TypeKeyのアカウント名]/

さて、サンプルコードの中を見ていくか。