第5回 OpenIDを実装したソースコードを読もう
倉貫 義人
松村 章弘
TIS株式会社
SonicGarden
2009/6/3
優れたプログラマはコードを書くのと同じくらい、コードを読みこなせなくてはならない。優れたコードを読むことで、自身のスキルも上達するのだ(編集部)
OpenIDでWebの認証を便利に実現
- - PR -
前回までは、Ruby on Railsの基本部分についてコードリーディングを行ってきました。
今回からは、より魅力的なWebアプリケーションを実現するために必要なさまざまな技術をRailsで活用したソースコードを読むという、さらに実践的な内容に入っていきます。
今回取り上げる技術要素はOpenIDです。GoogleやYahoo!、mixiなどの大手サービスがOpenIDに対応したことで話題になったので、聞いたことがある方は多いのではないでしょうか。
OpenIDとは、とある1つのIDを持っていれば、複数のWebアプリケーションで認証情報を共有できる仕組みです。OpenIDの仕様に則って作られたWebアプリケーションであれば、ユーザーはそれぞれのWebアプリケーションに認証情報を登録する必要がなくなるため、とても便利になります。
Webアプリケーションを提供する側も、アプリケーション側で認証情報を管理する必要はなくなるのはセキュリティ面での懸念が減り、機能の開発に集中できるメリットがあります。

OpenIDは、その名のとおり特定企業にロックインされないオープンな仕様になっており、どのアプリケーション提供者でも採用できるようになっています。OpenIDの仕様そのものは、OpenID Foundationによって策定されています。現在の最新バージョンは2.0です。
オープンな仕様であるため、各種プログラミング言語で使えるライブラリなどが多く存在している点もOpenID採用を後押ししてくれています。今回紹介するSKIPにおけるOpenID実装でも、すでに存在していたOpenIDのライブラリやアプリケーションを活用しています。
| 関連リンク: | |
| OpenID Authentication 2.0 http://openid.net/specs/openid-authentication-2_0.html |
|
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を指定するだけでよくなった。
これらの登場人物が出てくる利用の流れは以下の図になります(今回の説明のためだけに簡略化しています)。

OpenIDについての基本的な動作の仕組みは以上です。ここからは、コードリーディングの中で、理解を進めていきましょう。今回も、オープンソースの社内SNSである「SKIP」を使って、OpenIDをRailsアプリケーションで使う際の実際のソースコードを読んでいきます。
| 関連リンク: | |
| オープンソース「SKIP」 http://www.openskip.org/ |
|
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 |
| Index | |
| OpenIDを実装したソースコードを読もう | |
| Page1 OpenIDでWebの認証を便利に実現 OpenIDについて SKIPバージョン1.1リリースしました! |
|
| Page2 RPとして動作するSKIPのコードを読む SKIPにおけるRPの活用シーンと独自の拡張 |
|
| Page3 OPとして動作するSKIPのコードを読む |
|
| 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) 優れたプログラマはコードを書くのと同じくらい、読みこなす。優れたコードを読むことで自身のスキルも上達するのだ |
|
- PHPでGAE上に社員検索アプリを作る (2010/3/18)
GAEの制約により使うことができなかったテンプレートエンジン。PHP4GではSmartyが使えるようになった - 構造体の便利な用途、インターフェイス入門 (2010/3/10)
継承機能を排除したインターフェイス機能でダックタイピングが可能となった。サンプルで確かめてみよう - プライベートモードの履歴状態 (2010/3/1)
仕事に集中できるときと、なかなかできないとき、ありますよね。状態遷移図で考えてみよう - Goのswitch文で解くFizzBuzzと構造体のイントロ (2010/2/25)
Goではif文と同等の制御構造をswitch文で表現できる。試してみよう
|
|
スキルアップ/キャリアアップ(JOB@IT)
スポンサーからのお知らせ
| 「いつかは壊れるサーバ」そんな故障に 迅速で安価に手軽に対応する方法とは? New! |
| 「特権ユーザー」の事件を防げ! 万能権限を持つユーザーの管理方法とは? New! |
| 仮想環境の構築とデータ保護の特効薬?! 実績と信頼性の高いパッケージで安心運用 |
| 仮想環境のバックアップもこれまでどおり 「まるごと取ってまるごと戻す」簡単運用 |
| おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |
| その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |
| 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |
| 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
お勧め求人情報

**先週の人気講座ランキング**
〜CCNA編〜
| ◆ | TomcatやJBossなどAPサーバ環境に関する 情報を集約! “業務”用APサーバ大百科 New! |
| ◆ | 一気に解説! 最新のクラスタストレージ 「RAIDを超えたストレージ基準」……など New! |
| ◆ | クラウド的ユーザー体験の変化は脅威か? 仮想化技術を使いこなす運用管理術を紹介 New! |

| ◆ | 上司や部下、部署内メンバーとの情報共有 を“ガラッ”と変えるコラボツールとは? New! |
| ◆ | おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| ◆ | 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |

| ◆ | Twitterのアカウントはなぜ突破された? メールによる新手の攻撃手法とその対策 |
| ◆ | もう仮想化のお試しフェイズは終わりだ! Hyper-V 2.0が基幹システムも仮想化 |
| ◆ | 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |

| ◆ | クライアント企業から求められる人材 ⇒IT技術と経営戦略を併せ持つ「戦略家」 |
| ◆ | .NET編集長が実践する「技術情報検索術」 サンプル・コードを簡単に探す“技”は? |
| ◆ | 業務効率と情報セキュリティ対策を両立! 手間なく確実に機密情報を守る方法とは? |

| ◆ | 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |

| ◆ | 【CTC事例】約30の基幹システムを統合! 膨大なバッジジョブを制御した方法は? |
| ◆ | 仮想化すればコストは削減できるか? 仮想化に必要な「3つの視点」を解説する |
| ◆ | その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |







