Railsコードリーディング

第5回 OpenIDを実装したソースコードを読もう

倉貫 義人
松村 章弘
TIS株式会社
SonicGarden

2009/6/3

優れたプログラマはコードを書くのと同じくらい、コードを読みこなせなくてはならない。優れたコードを読むことで、自身のスキルも上達するのだ(編集部)

icon OpenIDでWebの認証を便利に実現

 前回までは、Ruby on Railsの基本部分についてコードリーディングを行ってきました。

 今回からは、より魅力的なWebアプリケーションを実現するために必要なさまざまな技術をRailsで活用したソースコードを読むという、さらに実践的な内容に入っていきます。

 今回取り上げる技術要素はOpenIDです。GoogleやYahoo!、mixiなどの大手サービスがOpenIDに対応したことで話題になったので、聞いたことがある方は多いのではないでしょうか。

 OpenIDとは、とある1つのIDを持っていれば、複数のWebアプリケーションで認証情報を共有できる仕組みです。OpenIDの仕様に則って作られたWebアプリケーションであれば、ユーザーはそれぞれのWebアプリケーションに認証情報を登録する必要がなくなるため、とても便利になります。

 Webアプリケーションを提供する側も、アプリケーション側で認証情報を管理する必要はなくなるのはセキュリティ面での懸念が減り、機能の開発に集中できるメリットがあります。

図1 OpenIDを使うとこんなに便利になる

 OpenIDは、その名のとおり特定企業にロックインされないオープンな仕様になっており、どのアプリケーション提供者でも採用できるようになっています。OpenIDの仕様そのものは、OpenID Foundationによって策定されています。現在の最新バージョンは2.0です。

 オープンな仕様であるため、各種プログラミング言語で使えるライブラリなどが多く存在している点もOpenID採用を後押ししてくれています。今回紹介するSKIPにおけるOpenID実装でも、すでに存在していたOpenIDのライブラリやアプリケーションを活用しています。

関連リンク:
リンク OpenID Authentication 2.0
http://openid.net/specs/openid-authentication-2_0.html

icon OpenIDについて

 コードリーディングに入る前に、OpenIDの仕組みについて簡単に紹介しておきます。本連載は、Railsコードリーディングが主体なので、あまり詳しくは説明しません。詳細を知りたい方は、以下の記事を参考にしてください。

関連記事:
リンク OpenIDの仕様と技術
http://www.atmarkit.co.jp/fsecurity/index/index_openid.html

 OpenIDでは、あちらこちらのWebアプリケーションで認証情報を持たなくても良いことが、利用者にとってもWebアプリケーション提供者にとっても便利なメリットです。

 ただし、認証情報をバラバラに持たない代わりに、どこか1カ所で管理する必要があります。それが、OpenIDにおける認証局になります。OpenIDでは、この認証局のことをOpenID Provider(OP)と呼んでいます。

 利用者は、そのOP上でOpenIDにおける自分自身を識別するIDを持つことになります。その利用者を一意に識別するIDはOpenID Identifierと呼ばれ、URLで表現されます。一方、Webアプリケーション提供者の提供する、認証情報を持たずにOPの認証情報を利用するアプリケーションのことを、Relying Party(RP)と呼びます。

 OpenIDにおける登場人物をまとめると、以下のようになります。

OpenID Provider(OP)
OpenIDにおける認証情報を管理するWebアプリケーション。利用者の情報を管理する必要があり、OpenIDの利用者はOPでログイン処理をすることで、OpenID認証が行われる(ログインの仕組みやデータ管理についてはOpenIDでは規定されていない)。GoogleやYahoo!、mixiなどが、利用者のOPとして使えるように対応している。
Relying Party(RP)
OpenIDにおける認証情報を持たずに、機能だけを提供するWebアプリケーション。認証に必要な情報や認証処理はすべてOPに任せることができる(OpenIDの仕様に則っていれば、言語やプラットフォームは問わない)。smart.fmなどが、RPとしてOpenIDでログインできるように対応している。
Webアプリケーション利用者
OpenIDに準拠したRPのWebアプリケーション利用者。RPを利用するためには、mixiなどのOPにてユーザー登録をして、OpenID Identifierを所持している必要がある。ただし、OpenID2.0からは必ずしもOpenID Identifierを覚えていなくてもよくなり、OPを指定するだけでよくなった。

 これらの登場人物が出てくる利用の流れは以下の図になります(今回の説明のためだけに簡略化しています)。

図2 OpenIDにおけるOPの認証とRPでの利用の流れ

 OpenIDについての基本的な動作の仕組みは以上です。ここからは、コードリーディングの中で、理解を進めていきましょう。今回も、オープンソースの社内SNSである「SKIP」を使って、OpenIDをRailsアプリケーションで使う際の実際のソースコードを読んでいきます。

関連リンク:
リンク オープンソース「SKIP」
http://www.openskip.org/

icon SKIPバージョン1.1リリースしました!

 2009年5月1日に、本連載でずっと題材にしてきた社内SNS「SKIP」のバージョン1.1がリリースされました。2008年にバージョン1.0を公開して以来、初のメジャーバージョンアップになります。主な機能の拡張は、以下の3点です。

  • プロフィール情報のカスタマイズが自由にできるようになりました
  • ブログや掲示板への画像や添付ファイルの張り付けが簡単になりました
  • OpenIDのRPとしての動作に加え、OPとしても動作するようになりました

 ほかにも多くの改善が行われており、セキュリティ対応も行っていますので、もしご利用中の方がいたら、ぜひアップデートしてください。

関連リンク:
リンク SKIPバージョン1.1リリースノート
http://portal.openskip.org/top/releasenote-ver1-1-0

 今回のバージョンアップで、本連載に関係する部分はOpenIDへの対応という点です。すでにSKIPでは、以前のバージョンからRPとしての動作はできるようになっていましたが、バージョン1.1からはOPとしての動作もできるようになりました。

 これにより、SKIPはOpenIDのOPにもRPにもなることができるようになりました。今回の記事では、RPとして動作するパターンと、OPとして動作するパターンのコードリーディングを行います。

 本記事ではバージョン1.1のソースコードを扱います。入手方法は、第3回にありますので、参考にしてください。

関連リンク:
リンク SKIP公式ページのアーカイブ(zipで入手)
http://www.openskip.org/ja/download/
リンク SKIP ver.1.1.0のソースコード(GitHub)
http://github.com/openskip/skip/tree/v1.1.0

 
1/3
next

Index
OpenIDを実装したソースコードを読もう
Page1
OpenIDでWebの認証を便利に実現
OpenIDについて
SKIPバージョン1.1リリースしました!
  Page2
RPとして動作するSKIPのコードを読む
SKIPにおけるRPの活用シーンと独自の拡張
  Page3
OPとして動作するSKIPのコードを読む

index Railsコードリーディング 〜scaffoldのその先へ〜

 Ruby/Rails関連記事
プログラミングは人生だ
まつもと ゆきひろのコーディング天国
 ときにプログラミングはスポーツであり、ときにプログラミングは創造である。楽しいプログラミングは人生をより実りあるものにしてくれる
生産性を向上させるRuby向け統合開発環境カタログ
Ruby on Rails 2.0も強力サポート
 生産性が高いと評判のプログラミング言語「Ruby」。統合開発環境を整えることで、さらに効率的なプログラミングが可能になる
かんたんAjax開発をするためのRailsの基礎知識
Ruby on RailsのRJSでかんたんAjax開発(前編)
 実はAjaxアプリケーション開発はあなたが思うよりも簡単です。まずはRuby on Railsの基礎知識から学びましょう
Praggerとnetpbmで作る画像→AA変換ツール
Rubyを使って何か面白いものを作ってみよう!
 一般的な画像をアスキーアートに変換するツールを作ってみる。さらに出力にバリエーションを持たせてみよう
コードリーディングを始めよう
Railsコードリーディング〜scaffoldのその先へ〜(1)
 優れたプログラマはコードを書くのと同じくらい、読みこなす。優れたコードを読むことで自身のスキルも上達するのだ
  Coding Edgeフォーラムフィード  2.01.00.91


Coding Edge フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

>

Coding Edge 記事ランキング

本日 月間