連載の第1回では既存サービスを例にして,OP(OpenID Provider)が提供するOpenIDアカウントでRP(Relying Party)へのログインを試してみました。
今回からは,自分でOpenIDに対応したRPを動かしながら,OpenIDの使い方を説明していきます。
第2回ではOpenIDに対応したライブラリを紹介し,Ruby用のライブラリを使ってRPのサンプルを動作させてみましょう。
OpenIDの対応ライブラリ
OpenIDアカウントでログイン可能なサイト(RP)を作るためには,OpenIDの仕様で定められたプロトコルに準拠しなければいけません。
幸い, OpenIDの仕様に対応した各言語のライブラリがオープンソースとして公開されています。これらのライブラリを使うことで,OpenIDの細かなプロトコルを自分でプログラミングしなくて良いようになっています。
ここでは,いくつかのOpenID対応ライブラリをご紹介します。
- OpenID Enabledのライブラリ
-
openidenabled.comというサイトにて,JanRain, Inc.が実装したOpenIDライブラリが公開されています。
対応言語はPHP,Python,Rubyの3種類です。いずれもOpenIDのバージョン2に対応しています。JanRain, Inc.はmyOpenIDというOPも運営しています。
- code.sixapart.comのライブラリ
-
PerlでのOpenIDライブラリは,Six Apart Codeリポジトリにて公開されているモジュールに,limilic.comで公開されているパッチを当てたものが使われているようです。
詳しくはYappoLogsのエントリが参考になります。
それでは,Ruby用のOpenIDに付属しているRailsのサンプルを動かしてみましょう。
RailsでOpenID対応のRPを動かしてみよう
こんどは,自前のRPサーバを動かしてみましょう。Rubyで使えるOpenIDライブラリとして,ruby-openidというものがあります。ruby-openidにはRailsのサンプルも付属しているので,それを使用します。筆者はMac OS X上で動かしましたが,Railsが使える環境であれば他のOSでも大丈夫です。
ここでは,以下の環境を想定しています。すでにRailsを動かしているのであれば,RubyGemsもインストールされているでしょう。
- Ruby1.8.6
- RubyGems1.0.2
- Rails2.0.2
OpenIDライブラリのインストール
Ruby用のOpenIDライブラリであるruby-openidのバージョンは2.0.4です。このライブラリはOpenID Authentication 2.0に対応しています。
ruby-openidは以下のようにRubyGemsを使ってインストールします。
$ sudo gem install ruby-openid
正しくインストールされたかどうかは,listコマンドで確認できます。
$ gem list
*** LOCAL GEMS ***
(中略)
rails (2.0.2)
rake (0.8.1)
ruby-openid (2.0.4)
RubyGemsでruby-openidをインストールすると,ライブラリの一式は下記のディレクトリにコピーされます。 ここで,${RUBYLIB}はRubyライブラリのインストール先に読み替えてください。 一般的には/usr/lib/rubyや/usr/local/lib/rubyが相当します。
${RUBYLIB}/gems/1.8/gems/ruby-openid-2.0.4
このディレクトリには,ライブラリ本体以外にサンプルやテストも同時にインストールされます。 READMEやCHANGELOGに目を通されておくといいでしょう。
Railsサンプルの起動
ruby-openidライブラリには,Railsを使ったOPとRPのサンプルが含まれています。 これらのサンプルはライブラリインストール先のexample/rails-openidにあります。 まず,このディレクトリをどこか適当な場所にコピーしてください。
$ cp -r example/rails-openid $HOME/openid
$ cd $HOME/openid/rails-openid
Railsを動かすために,必要なlog,dbディレクトリを作成します。
$ mkdir log db
なお,ruby-openidに付属するRailsのサンプルでは,Rails2.0を動作させるために必要なセッションCookieの設定が書かれていません。そのため,設定ファイルにセッションの設定を追記する必要があります。下記のように:session_key, :secretを設定してください。 secretは30文字以降のランダムな文字列です。
$ vi config/environment.rb
config.action_controller.session = {
:session_key => '_openid_session',
:secret => 'c67504f48.....7e2557bc0'
}
準備ができたらRailsサーバを起動します。
ruby script/server
ブラウザでhttp://サーバのアドレス:3000/consumerにアクセスしてログイン画面が表示されれば起動成功です。

