ホーム DoRuby RailsでOAuth Providerを作る

RailsでOAuth Providerを作る

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

先日、お客様から「OAuthに対応できますか?」という質問を受けました。

正直「OAuthって何?」 という感じだったので、ちょっと調べてみました。

☆OAuthとは・・・

→認可情報の委譲のための仕様
 -予め信頼関係を構築したサービス間で
 -ユーザの同意のもとに
 -セキュアにユーザの権限を受け渡しする

とあります。

なんかOAuthには3つの要素が存在するようです。

  -OAuth Service Provider(ユーザの認可情報を第3者に渡す)
  -OAuth Consumer(ユーザの認可情報を受け取り、ユーザに代わっていろんな情報へのアクセス、追加・削除を行う)
  -User(ProviderがConsumerに認可情報を渡すことを許可したり、認可情報を無効化する)

mixiの「友人を探す」の「アドレス帳から探す」でOAuthを使っているそうなので、それに当てはめると・・・

 ↓

ユーザ(User)の許可のもと、mixi側(OAuth Consumer)にGoogle(OAuth Service Provider)のGmailのアドレス帳へのアクセス権限を与えて、mixi内にマイミクに追加するためのアドレス帳のインポートが出来る

 ・mixiにGmailのアカウントやパスワードを渡す必要がありません
・ユーザはGmail内において、mixiを認証済みのウェブサイトから外すことで、mixiへの認可情報の受け渡しを無効化出来ます

なんとなく安全なのかなぁ~程度。。。

☆OAuth Providerの実装

お客様の話を聞いていると、どうもサイト内の友達情報とかをConsumerとなるゲーム側に受け渡すためにOAuthを使い、サイト=Providerという形にしたいっぽかったので、そもそもRailsのアプリにOAuthのProviderを取りこめるのか調べてみると・・・

 Railsにruby-oauth gemと、OAuth Pluginというのがあって、それを使えば簡単にProvider側を実装できるらしいです。。。

◆ruby-oauth gemのインストール

gem install oauth

◆アプリにpluginをインストール(Railsアプリ配下で)

./script/plugin install git://github.com/pelle/oauth-plugin.git

◆Controller、Modelの作成

 ./script/generate oauth_provider

 これにより、以下のファイルが出来ます

 app/controllers/oauth_controller.rb
 app/models/oautht_token.rb
 app/models/access_token.rb
 app/models/request_token.rb
 app/models/client_application.rb
 app/models/oauth_nonce.rb

◆routesとassociationを設定

 map.oauth ‘/oauth’,:controller=>’oauth’,:action=>’index’
 map.authorize ‘/oauth/authorize’,:controller=>’oauth’,:action=>’authorize’
 map.request_token ‘/oauth/request_token’,:controller=>’oauth’,:action=>’request_token’
 map.access_token ‘/oauth/access_token’,:controller=>’oauth’,:action=>’access_token’
 map.test_request ‘/oauth/test_request’,:controller=>’oauth’,:action=>’test_request’

—-

 has_many :client_applications
 has_many :tokens, :class_name=>”OauthToken”,:order=>”authorized_at desc”,:include=>[:client_application]

—-

rake db:migrate

これにより、OAuth Service Providerの最低限の機能は揃うそうです。

また、下記のbefore_filterが使えるとのこと

・before_filter :login_or_oauth_required
・before_filter :oauth_required

でも、このプラグイン(Provider)を使うためには、よくよく調べてみるといろいろな条件があるようです。

・login_requiredを使っている

・rails2.0を使っている(←これが結構大きい・・・)

・OAuth Consumerの管理において、Consumerの削除・編集の機能実装が必要(え?結構重要じゃん)

既存のサイトに導入するのは結構難しそうですが、趣味とかで組んでみるのには面白そうですね☆

記事を共有

最近人気な記事