はじめに
OpenIDは、ユーザー認証および識別サービス分野に大きな変革をもたらすサービスであり、フレームワークであり、プロトコルでもあります。2004年にBrad FitzpatrickによってスタートしたOpenIDですが、今ではAOL、Google、IBM、Microsoft、VeriSign、Yahoo!などの巨大インターネット組織からサポートされるほどのフレームワークに成長しています。OpenIDは、Webサイトのための信頼性に優れたオープンな分散ユーザー認証を実現する仕組みであり、Web開発者は認証コードを書く手間から解放されます。
本稿ではOpenIDの概要と、Webサイト開発にとってのOpenIDの利点について説明します。また、OpenIDをRuby on Rails 2.0フレームワークに組み込む方法について例を挙げて説明します。
必要な環境
- Rubyバージョン1.8.4以上(1.8.6を推奨)
- RubyGems(バージョン1.0.1を推奨)
- Rails 2.0.2
- MySQL
- Ruby OpenIDライブラリ
Web全体で共通するユーザー識別情報
Webアプリケーションにおける認証とは、ユーザーの識別情報を検証し、アプリケーションにアクセスしようとしているユーザーが「本人」であることを確認するプロセスです。
最も一般的なのは、ユーザー名とパスワードを使用する認証方式です。この方式では、ユーザー名はそのユーザーの識別情報を表し、パスワードは検証トークンを表します。この検証トークンにより、その所有者以外の人物は、関連付けられているユーザー名の本人であることを主張できないことが保証されます。ユーザーの識別情報を検証する必要があるほとんどのWebサイトではこの認証方式を採用しており、サイト独自のロジックや検証コンポーネントを実装しています。
ところが、ユーザー名とパスワードによる認証方式ではユーザー資格情報があちこちで必要になるため、最終的には銀行口座や電子メール、ブログ、会社のWebサイトなど、さまざまなサイトで数十個のユーザー名とパスワードを使用するという結果になります。
OpenIDは、このような資格情報の散在を解決します。OpenID Webサイトにも記載されているように、OpenIDは「インターネット上で使用する単一のデジタル識別情報(a single digital identity across the Internet)」であり、さまざまなWebサイトでいくつものユーザー名を使用しなくてもよくなります。OpenIDはユーザーの資格情報を1箇所で管理し、他のWebサイトでユーザーの識別情報を検証する必要がある場合は、管理しているWebサイトからユーザーの資格情報を照会できます。
OpenIDのエンティティと認証フロー
OpenIDサービスは、次のエンティティで構成されています。これらのエンティティは相互に通信します。
- Provider
- Relying Party
- End User
OpenIDでは、ユーザーはOpenID Identifierによって一意に識別されます。このOpenID Identifierは、一般的にはプレーンURLです(これを固有のユーザー名と見なします)。このOpenID Identifierには通常、ユーザーの資格情報を保管しているProvider(例えば、yourname.myopenid.com)が指定されています。
図1および図2に、従来の認証方式とOpenID認証方式を示します。
これらの図に示すように、OpenID認証フローはデータベースを基にした従来の認証方式とは若干異なります。OpenID認証は、次の手順にまとめることができます。
- あるWebサイトで、ユーザーが自分自身の認証を希望します。
- ユーザーは、このWebサイトにOpenID Identifierを送信します。
- Webサイトは、受け取ったIdentifierを正規のURL(http://yourname.myopenid.comなど)に変換します。
- Webサイトが、生成されたURLをブラウザにリダイレクトします。このURLが示す場所で、ユーザーはOpenID Providerに対して自分自身の認証を要求できます。
- OpenID Providerが、ユーザー名とパスワードを使用する従来の認証方式、または証明書交換による高度な認証方式によって、ユーザーを認証します。
- 認証が正常に完了すると、OpenID Providerは最初のWebサイトに、ブラウザと検証済みのユーザー資格情報をリダイレクトします。
- 最初のWebサイトは、この資格情報を使用してユーザーを識別し、そのユーザーにサービスを転送します。
- 認証が正常に完了しなかった場合、OpenID Providerは最初のWebサイトにブラウザとエラーキーをリダイレクトします。最初のWebサイトは、このエラーキーを使用して問題を処理できます。
セキュリティを保証し、識別情報のスプーフィング(なりすまし)を防止するために、WebサイトとOpenID Providerはさらにいくつかの処理を実行します。もっとも、OpenIDクライアントライブラリを使用するのであれば、Web開発者はこれらの処理の詳細を知る必要はなく、すべての処理はライブラリによって透過的に行われます(次の節に示す例では、OpenIDクライアントライブラリを使用しています)。
OpenIDの最新の仕様(バージョン2.0)では、複雑さを考慮してProvider Discoveryの概念を取り入れています。最新の仕様についてあまり知らなくても、WebサイトとOpenIDは適切に統合できます。図3に、上記の一連の手順を簡単に示します。