OpenIDを触る(古い内容)
****************************
Contents:
.. contents::
.. toctree::
:maxdepth: 1
はじめに
=============
OpenIDのPHPライブラリを利用して,
OpenIDの
1)Consumer
2)IdP
を作成することができます.
(少なくとも日本語では)参考に挙げたURLに従えば,
容易にサンプルページを作成することができます.
しかし,OpenIDについての理解をせずに
URLの情報だけを見てOpenIDの仕組みを理解することは困難です.
まず,
`既存記事 `
を見て,感覚をつかみます.
インストール
=====================
Debianの場合
---------------
::
sudo apt-get install apache2 php5
sudo apt-get install php5-gmp php5-curl
はapache2をrestartすること.
OpenIDテストコードのダウンロード
========================================
`ここのページ `
より,
`1.2.3 `
か
`2.1.2 `
をダウンロード.
使うのは1.2.3
2.1.2は,今後のために.
1.x系を使う理由
* OpenID 2.x系は携帯で使えないのではないかという(勝手な)仮定
* 1.x系のほうが仕様策定が年単位で早くAPIも「枯れている」
* 1.x系のほうがシンプルであり試験目的では楽ではないか
今回は,www.hogetan.netというDebian/Lennyのホスト上の
~kanai/keitai/OpenIdTest/examples/consumer/
上でテストを行いました.
/etc/apache2のmods-enable以下で
::
sudo ln -s ../mods-available/userdir.load userdir.load
sudo ln -s ../mods-available/userdir.conf userdir.conf
次に、
bunzip2 -c php-openid-1.2.3.tar.bz2 | tar xfv -
で解凍.
環境のテストテスト
==========================
まず環境がOpenIDのサンプル動作に十分な環境下を調べます.
http://www.hogetan.net/~kanai/keitai/OpenIdTest/examples/detect.php
この状態においてエラーが出る状態を試していないのでわかりませんが,
特にエラーがでなければ問題ないと思います.
consumeのテスト
=========================
Consumeについては,認証ができたかどうかのみを確認します.
特に
今までのテストは,
xlune)http://labs.xlune.com/openid/
を利用していましたが,同じことが,
http://www.hogetan.net/~kanai/keitai/OpenIdTest/examples/consumer/
でできます.
今は「認証」だけを目的にしているので,このテストコードで十分です.
ただし,xlineのほうが,いろいろな情報(IdPから送られてきた情報)を表示
できるので,必要に応じて使い分けるのが良いと思います.
* IdPの設置
まず,IdPを設置するさいには,データの格納先を決める必要があります.
IdPは許可したConsumeなどの情報を保持する必要があるからです.
正直,どこにつくるのが良いのかわかりませんでした.
今回はテストのために,public_html以下に作りました.
::
If you are using the filesystem store, your data directory must be readable and writable by www-data and not availabe over the Web.
ということなので,www-dataか,SUEXECしているなら,ユーザでかければよさそう.
今回は,777でall permitしています.
::
mkdir ~/public_html/keitai/OpenIdTest/examples/database
chmod 777 ~/public_html/keitai/OpenIdTest/examples/database
setup
=================
server.phpの下にconfig.phpを作る必要があります,
::
http://www.hogetan.net/~kanai/keitai/OpenIdTest/examples/server/setup.php
などにアクセスしてください.
次の項目を設定します.
MySQLなども指定可能ですが,今回は,
先ほど作成したweb-dataが書き込めるディレクトリを指定します.
::
Store method: Filesystem
/home/kanai//public_html/keitai/OpenIdTest/examples/database/
"認証に使うURLとそのパスワード"を入力します.
たとえば,
::
URL: http://www.hogetan.net/~kanai/login.html
パスワード:himitsu
で作成します.
ここでの設定は何ら意味がありません.
これからこのURLを証明するという宣言だけです.
ダウンロードしてファイルをserver.phpと同じところに設置するか,
::
cat > ~kanai/public_html/keitai/OpenIdTest/examples/server/config.php
します.
::
注意: 最初にをいれること.
これをしないと,うまく,config.phpを解釈してくれません.思いきりはまりました・・・
うまくいくと,
::
http://www.hogetan.net/~kanai/keitai/OpenIdTest/examples/server/server.php
OpenID Server Endpoint
と言われます.
さて,ここでポイントです.
先ほど,認証するURLとして,http://www.hogetan.net/~kanai/login.html
を指定しました.
::
cat > ~kanai/public_html/login.html
します.
* 環境のテストテスト
::
http://www.hogetan.net/~kanai/keitai/OpenIdTest/examples/consumer/
に入り,
::
http://www.hogetan.net/~kanai/login.html
と入れてください.
認証の画面で,
::
http://www.hogetan.net/~kanai/login.html
himitsu
といれると認証が成功します.
--
* 用語定義
User-Agent: ブラウザ,特にここでは携帯のこと(OpenID用語)
* 課題
1. IdPがCookieをrequireすること
2. ConsumeがCookieをrequireすること
::
1と2は,多くのウェブサイトにおいて,
認証後の状態を保持するためにCookieが用いられていることを示します.
OpenID自身にはRequireな機能ではないはずです.
ただし,今回利用した「最もシンプルなIdPにもCookieが利用されて」います.
このため,まずは,Cookieを使わない状態でOpenID APIが利用可能であるかを調べます.
3. User-AgentがLocation,Refererに含むURLの「文字数」をサポートしないこと
こればっかりは仕方がないと思っています.
なぜなら,「使うIdPなどのドメイン名によって長さが違う」ですし,
そもそも,ブラウザの実相依存なので,解決が難しいです.
# ただし,最近のブラウザで
あえて言うなら,TinyURLではないですが,URL変換のWrapperが
--
* 目的
今回は前回のOpenIDライブラリを使い,
IdPにおける認証なし化を行います.
* 方法
taral氏の公開している認証なしOpenID IdPを利用します.
http://taral.livejournal.com/147710.html
より,
http://taral.dreamhost.com/openid.txt
をダウンロードします.
::
wget http://taral.dreamhost.com/openid.txt
cp openid.txt taral.php
これに対して次のようにパッチを当てます.
::
diff -ruN openid.txt taral.php
--- openid.txt 2007-02-17 04:28:49.000000000 +0900
+++ taral.php 2009-03-08 22:10:20.000000000 +0900
@@ -347,9 +347,11 @@
if (!$root || !valid_root($root, $ret)) {
$root = $ret;
}
+// Comment out for check your root url
+// badreq(" $root");
switch ($root) {
- case "http://www.lifewiki.net/":
- case "http://*.danga.com/openid/demo/":
+ case "http://www.hogetan.net:80/~kanai/keitai/OpenIdTest/examples/consumer":
+ case "http://www.hogetan.net/~kanai/keitai/OpenIdTest/examples/consumer":
break;
default:
badreq("Requester not trusted");
最後のbadreqをコメントアウトすることでも対応可能です.
ただし,その場合,世界中のサーバからAll Allowな認証システムとなるので,気を付けてください.
この上で,"認証するURL"
として,
~kanai/public_html/auth2.html
に
::
と書きます.
この上で,
http://www.hogetan.net/~kanai/keitai/OpenIdTest/examples/consumer/
で
http://www.hogetan.net/~kanai/auth2.html
と入れると認証が成功します.
* 情報の整理
a) まずはログインを無条件に許可する
ログイン画面
::
examples/server/lib/render/login.php
login_renderで絵画される.login_renderは,
::