CodeZine(コードジン)

特集ページ一覧

OpenIDとRails:Authentication 2.0

OpenID認証をRuby on Rails 2.0に組み込む方法

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2008/06/16 14:00

ほとんどすべてのWebアプリケーションでは、ユーザー名とパスワードの組み合わせを使用して認証を行っています。OpenIDを使用すると、認証はより効率的になります。本稿では、Rails 2.0アプリケーションにOpenID認証を組み込む方法について学習します。

目次

はじめに

 OpenIDは、ユーザー認証および識別サービス分野に大きな変革をもたらすサービスであり、フレームワークであり、プロトコルでもあります。2004年にBrad FitzpatrickによってスタートしたOpenIDですが、今ではAOL、Google、IBM、Microsoft、VeriSign、Yahoo!などの巨大インターネット組織からサポートされるほどのフレームワークに成長しています。OpenIDは、Webサイトのための信頼性に優れたオープンな分散ユーザー認証を実現する仕組みであり、Web開発者は認証コードを書く手間から解放されます。

 本稿ではOpenIDの概要と、Webサイト開発にとってのOpenIDの利点について説明します。また、OpenIDをRuby on Rails 2.0フレームワークに組み込む方法について例を挙げて説明します。

必要な環境

Web全体で共通するユーザー識別情報

 Webアプリケーションにおける認証とは、ユーザーの識別情報を検証し、アプリケーションにアクセスしようとしているユーザーが「本人」であることを確認するプロセスです。

 最も一般的なのは、ユーザー名とパスワードを使用する認証方式です。この方式では、ユーザー名はそのユーザーの識別情報を表し、パスワードは検証トークンを表します。この検証トークンにより、その所有者以外の人物は、関連付けられているユーザー名の本人であることを主張できないことが保証されます。ユーザーの識別情報を検証する必要があるほとんどのWebサイトではこの認証方式を採用しており、サイト独自のロジックや検証コンポーネントを実装しています。

 ところが、ユーザー名とパスワードによる認証方式ではユーザー資格情報があちこちで必要になるため、最終的には銀行口座や電子メール、ブログ、会社のWebサイトなど、さまざまなサイトで数十個のユーザー名とパスワードを使用するという結果になります。

 OpenIDは、このような資格情報の散在を解決します。OpenID Webサイトにも記載されているように、OpenIDは「インターネット上で使用する単一のデジタル識別情報(a single digital identity across the Internet)」であり、さまざまなWebサイトでいくつものユーザー名を使用しなくてもよくなります。OpenIDはユーザーの資格情報を1箇所で管理し、他のWebサイトでユーザーの識別情報を検証する必要がある場合は、管理しているWebサイトからユーザーの資格情報を照会できます。

OpenIDのエンティティと認証フロー

 OpenIDサービスは、次のエンティティで構成されています。これらのエンティティは相互に通信します。

  • Provider
  • ユーザーの資格情報を保管し、別のWebサイトからのユーザー認証の照会に使われる標準APIを公開します。一般的な無償のProviderとしてmyOpenIDVeriSignがあります。
  • Relying Party
  • ユーザーの識別情報の検証を必要とするWebサイトです。
  • End User
  • Webサイトで自分自身の認証を試みるユーザーです。

 OpenIDでは、ユーザーはOpenID Identifierによって一意に識別されます。このOpenID Identifierは、一般的にはプレーンURLです(これを固有のユーザー名と見なします)。このOpenID Identifierには通常、ユーザーの資格情報を保管しているProvider(例えば、yourname.myopenid.com)が指定されています。

 図1および図2に、従来の認証方式とOpenID認証方式を示します。

図1 従来の認証方式。ユーザーは、Webサイトごとに異なる資格情報を使用します。
図1 従来の認証方式。ユーザーは、Webサイトごとに異なる資格情報を使用します。
図2 OpenID認証方式。ユーザーは、資格情報を1つだけ使用します。この資格情報は他のWebサイトと共有されます。
図2 OpenID認証方式。ユーザーは、資格情報を1つだけ使用します。この資格情報は他のWebサイトと共有されます。

 これらの図に示すように、OpenID認証フローはデータベースを基にした従来の認証方式とは若干異なります。OpenID認証は、次の手順にまとめることができます。

  1. あるWebサイトで、ユーザーが自分自身の認証を希望します。
  2. ユーザーは、このWebサイトにOpenID Identifierを送信します。
  3. Webサイトは、受け取ったIdentifierを正規のURL(http://yourname.myopenid.comなど)に変換します。
  4. Webサイトが、生成されたURLをブラウザにリダイレクトします。このURLが示す場所で、ユーザーはOpenID Providerに対して自分自身の認証を要求できます。
  5. OpenID Providerが、ユーザー名とパスワードを使用する従来の認証方式、または証明書交換による高度な認証方式によって、ユーザーを認証します。
  6. 認証が正常に完了すると、OpenID Providerは最初のWebサイトに、ブラウザと検証済みのユーザー資格情報をリダイレクトします。
  7. 最初のWebサイトは、この資格情報を使用してユーザーを識別し、そのユーザーにサービスを転送します。
  8. 認証が正常に完了しなかった場合、OpenID Providerは最初のWebサイトにブラウザとエラーキーをリダイレクトします。最初のWebサイトは、このエラーキーを使用して問題を処理できます。

 セキュリティを保証し、識別情報のスプーフィング(なりすまし)を防止するために、WebサイトとOpenID Providerはさらにいくつかの処理を実行します。もっとも、OpenIDクライアントライブラリを使用するのであれば、Web開発者はこれらの処理の詳細を知る必要はなく、すべての処理はライブラリによって透過的に行われます(次の節に示す例では、OpenIDクライアントライブラリを使用しています)。

 OpenIDの最新の仕様(バージョン2.0)では、複雑さを考慮してProvider Discoveryの概念を取り入れています。最新の仕様についてあまり知らなくても、WebサイトとOpenIDは適切に統合できます。図3に、上記の一連の手順を簡単に示します。

図3 OpenID認証フロー。ユーザーは、Webサイトごとに異なる資格情報を使用します。
図3 OpenID認証フロー。ユーザーは、Webサイトごとに異なる資格情報を使用します。

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

あなたにオススメ

著者プロフィール

  • Riccardo Govoni(Riccardo Govoni)

    2003年からJ2EE開発者としてイタリアの金融サービス会社に勤務。ソフトウェアアーキテクトとして従来の銀行システムのWebフロントエンドの設計に従事。物理学修士。SCJP(Sun Certified Java Programmer)資格を持つ。

  • japan.internet.com(ジャパンインターネットコム)

    japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.com や EarthWeb.c...

バックナンバー

連載:japan.internet.com翻訳記事

もっと読む

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5