Skip to content

igaiga/oauth_rails_sample

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
*概要*
Railsの oauth-plugin を使って OAuth service providerを自作します。

*構成*
*iga_oauth_provider 下記の手順で作成した OAuth service provider
*oauth_consumer 参考サイトからDLしてきた OAuth consumer
*oauth_service_provider 参考サイトからDLしてきた OAuth Service Provider

*参考サイト*
* ゼロから学ぶOAuth
** http://gihyo.jp/dev/feature/01/oauth/0001

*手軽に試してみたい方*
既成の oauth_service_provider と oauth_consumer を使って起動してみましょう。
Rails2.3.8 で動かすようにしていますが、config/environment.rb のRAILS_GEM_VERSIONを変えれば動くんじゃないかと思います。

* $ sudo gem install oauth
* 両方で rake db:migrate しておきます。

gem oauth を入れ、以下のように起動したとします。 
* consumer: script/server -p 3000
* provider: script/server -p 3001

Service Provider で適当なユーザー名でサインインし、Register your application でコンシューマを登録します。
* Name : てきとうに
* Application URL : http://localhost:3000
* Callback URL : http://localhost:3000/my_sample/callback
* Support URL : 空白で
consumer key/secret をコピーしておきます。
provider の client_applications テーブルにconsumer key/secret が登録されているのが確認できます。
* $ sqlite3 development.sqlite3
* > select * from client_applications;
次にconsumer 側の設定をしてAccess key/secret を取得します。
new consumer から先ほど service provider で発行された key/secret を登録します。
* service provider: my_sample
* Consumer key: 上で取得した値
* Consumer secret: 上で取得した値
* Scope: 空白で
new access token から my sample establish を選択します。
authorize access にチェックを入れ、save changes で Access token/secret が取得できます。

*OAuth Service Provider の作り方*
oauth-plugin を利用してservice provider を自作してみます。
oauth-plugin のほかに、任意の認証プラグインが必要なので、ここでは acts_as_provider を使います。

* $ sudo gem install oauth
* $ rails service_provider
* $ cd service_provider
oauth-plugin をインストールして、ジェネレーターで作成します。
* $ script/plugin install git://github.com/pelle/oauth-plugin.git
* $ script/generate oauth_provider
acts_as_provider をインストールして、ジェネレータで作成します。
* $ script/plugin install git://github.com/gundestrup/acts_as_authenticated.git
* $ script/generate authenticated user account
oauth_controller.rb を AccountController を継承するように変更します。
* class OauthController < AccountController
* コメントアウト→ #class OauthController < ApplicationController
oauth_clients_controller.rb と oauth_controller.rb の両方に login_required メソッドを追加します。(追加しないと undefined method `login_required'エラー。)
  def login_required
    true
  end
application_controller.rb にcurrent_user メソッドを追加します。(追加しないと undefined local variable or method `current_user')
手抜きをして、最初にログインするユーザー名とパスワードをここに書いちゃいました。
  def current_user
    @current_user ||= User.authenticate('foo', 'hoge')
  end
user.rb を修正します。
* has_many :client_applications
* has_many :tokens, :class_name=>"OauthToken",:order=>"authorized_at desc",:include=>[:client_application]
DB を作ります。
* rake db:migrate

動作確認してみます。
* $ script/server -p 3001
* http://localhost:3001/account へアクセスします。
* てきとうな名前とパスワードで登録します。(名前とパスワードをcurrent_userメソッドに書いてください。)
* In the Caboose. な画面が出ます。
* http://localhost:3001/oauth_clients へアクセスします。
* Register your application から以下を登録します。
** 任意
** Main Application URL : http://localhost:3000
** Callback URL : http://localhost:3000/my_sample/callback
** Support URL : 空白で
* 成功すれば Consumer Key/Secret が取得できます
上述のサンプル oauth_client を使ってAccess token が取得できれば成功です。

*AccessTokenをつかったアクセス*
(例えばAccountControllerなどで)制御したいメソッドの前にbefore_filterを指定する
(AccountControllerを継承したクラスでないと authorized? メソッドがないと言われます。
 なぜか、OauthControllerでbefore_filterを定義した場合はうまく動きませんでした。)
* before_filter :oauth_required, :only => [:at_access]
at_access アクションを実装
  def at_access
  end
at_access view を置きます
* app/views/account/at_access.html.erb
making_oauth_service_provider/sample_consumer.rb がconsumer側のコードです。
sample_consumer.rb に consumer key/secret, access token/token secret を設定します。
response = access_token.get('/account/at_access') にアクセス対象アクションを記述します。
実行します。
 $ ruby sample_consumer.rb
 #<Net::HTTPOK 200 OK readbody=true>
 <h1>You have successed to accesss with access token!</h1>
と出ればアクセス成功です。
アクセストークンなどをわざと不正にして、Invalidになることも確かめればOKです。


■Rails3で使う方法
Gemfile に
gem 'oauth'
gem 'oauth-plugin', :git => 'git://github.com/pelle/oauth-plugin.git', :branch => 'rails3'

About

OAuth Rails Sample

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published