Webの分散ID認証システムについて

分散認証システム関係の話。

あるユーザーの本人確認が必要な時に結果的に必要なものは「本人かそうでないか」。その結果を得るためにIDやメールアドレスやパスワードなどの組み合わせで判別する。アプリケーション毎にその判別を行うと当然判別に必要な情報もアプリケーション数だけ必要になる。

本人確認の結果だけが分かればいいなら認証をどこか別でおこなって結果を受け取ればいい。ではどこで認証をおこない、どうやって結果の受け渡しをするのか?

Web(UserAgentベース)の分散ID認証システムではURL・XRISxipなど(以下URI)をIDとして使用する。認証はIDに結び付けられた認証サーバーでおこない、何を元に本人判別するかは完全にその認証システムに委ねられる。

一般的には認証先でID・パスワードなどを用いてログインして認証リクエストを許可する事により認証成功という結果が返る。例えばhttp://takahashimeijin.com/というIDで1秒間に16回クリック出来れば認証成功ということも出来る。IDと認証サーバーに関連性は必要無い(このURIの認証サーバーはここだ、という情報はIDとなるURIのページ中に記す)。これによりIDと認証サーバーを分離出来るのでURIを保持している限り認証サーバーに依存する事なく恒常的にIDを使用出来る事になる。

あるIDで認証しようとした場合、そのIDはどの認証サーバーを使用して結果として何が返るかは、

OpenIDLIDなどのURIベースの認証プロトコルが仕様として決められている。仕様毎に実装が異なるので、URIがどの仕様でどうやって識別すれば良いかはYadisという仕様で決められている。

この形態での認証が一般化すれば、アプリケーション側でログイン識別子を持たなくても良くなり、ユーザーは1つのIDで複数のサービスが利用出来るようになる。利点だけで全く問題(課題)が無いわけではないけれど。

間違ってる所があれば指摘していただくという事で基本的な纏め。

実際の実装レベルの話と細かい仕様についてはまた別エントリにて。最近OpenIDが一番勢いがあるようなのでOpenID関係かな。