PHP OpenID を使う
PukiWiki で OpenID を使ってみたい。 具体的には以下のようなことを考えている。
- 編集は誰でもできる
- ログインしていない人が編集する場合は Akismet で SPAM 判定する
- OpenID でログインした人は編集する場合は、 SPAM 判定を実施しない
思っていたよりも 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
とりあえず大切なのは以下のファイルやディレクトリかな。
- Auth … OpenID ライブラリの本体
- Services … OpenID ライブラリが依存している Yadis ライブラリ
- examples … サンプルプログラム
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
それぞれのファイルの役割は以下の通り。
- index.php … 最初に表示するページ。ログインID (URL) を入力する。
- try_auth.php … ユーザが入力したログインIDを受け取り、認証サーバへのリクエストを生成する。
- finish_auth.php … 認証サーバからの認証結果を受け取り結果を表示する(画面はindex.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のアカウント名]/
さて、サンプルコードの中を見ていくか。