その他
    ホーム 技術発信 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の削除・編集の機能実装が必要(え?結構重要じゃん)

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

    記事を共有