2010-12-12 3 views
2

私はAuthlogicとRails 3を使用しています。通常のブラウザベースのユーザーエクスペリエンス(フォーム経由などでログイン)の上に、 API。AuthlogicがHTML以外のリクエストに対してセッション/クッキーを設定しないようにする

Authlogicは、デフォルトでは持続しない単一のアクセストークンをサポートしているようです。

/users.xml?user_credentails=my_single_access_token 

質問:私はのようにGET引数を追加することによって、それらを供給私はAuthlogicは、HTTP基本認証を介したAPIキーを受け入れることができますどのような方法がありますか? Freshbooksと同じ

curl -u 605b32dd:X http://sample.highrisehq.com/people/1.xml 

Highriseはを可能に、ちょうどこのような何かをし

私はこの機能を模倣しに行くかどう
curl -u insert_token_here:X https://sample.freshbooks.com/api/2.1/xml-in -d '[xml body here]' 

?入力データ(フォームからのポストデータ、HTTPベーシック、APIトークン)がどこに取り込まれているのか把握できません。引数なしでUserSessions.findへの呼び出しにそれを煮詰めましたが、後にそのデータが失われます。

ご協力いただければ幸いです。

関連の質問: HTTPの基本機能が使用されている場合は、セッションの永続性を無効にすることもできます(クッキーが保存されないようにする)。これについての助けもありがとう!

答えて

0

免責事項:Authlogicのコア機能をハッキングすることなく、これを説明する方法では100%ではありません。コアへhttp://rdoc.info/github/binarylogic/authlogic/master/Authlogic/Session/Params/Config

あなたが持っているとして最初の問題は、そのauthlogic要求がATOMまたはRSSはあなたがここで見るのparamater設定を渡す必要があり、これをオーバーライドすることでない限りSSOを使用すると、認証のためのトークンを防止しています問題:私はこの機能を扱うための「簡単な」方法は見当たりませんが、カールのようなものに対しては、URLを訪れたときと同じように、ユーザートークンをパラメータとして渡します(-Gオプションを使用)。

cURLのドキュメント:あなたがAPIを実装している場合http://curl.haxx.se/docs/manpage.html

+0

サイト全体で単一のアクセストークン/ APIキーを許可するのは、コントローラの 'single_access_allowed? 'メソッドがtrueを返すのと同じくらい簡単です。 –

5

、あなたはその後に装着されている別のRackアプリケーション構築を検討することもでき「/ /api/1.0を...」と、あなたのモデルを共有しています。

あなたのAPIを公開ルートに直接関連させることに煩わされることなく、APIユーザーのために構築するのが難しい場合があります。

良い方法は、あなたがしたいだけのメソッドを公開シンプルなシナトラのアプリケーションを作成するには、その後、別の認証戦略を作成するには、次のようになります。

require 'sinatra'  
require 'active_support' # all the Rails stuff 
require 'lib/user' # your User class 
require 'sinatra/respond_to' # gem install sinatra-respond_to 

Sinatra::Application.register Sinatra::RespondTo 

use Rack::Auth::Basic, "API", do |username, password| 
    User.find_by_login(username).valid_password?(password) 
end 

get '/api/1.0/posts' do 
    @posts = Post.recent # assuming you have a Post model... 

    respond_to do |wants| 
    wants.xml { @posts.to_xml } 
    wants.to_json { @posts.to_json } 
    end 
end 

get '/api/1.0/users/:id' do 
    @user = User.find_by_login(params[:id]) 

    # Careful here - don't release personal details! 
    respond_to do |wants| 
    wants.xml { @user.to_xml } 
    wants.to_json { @user.to_json } 
    end 
end 

は「1.0」を使用してAPIをバージョン管理(または同様のこと)は、モデルを変更した場合、ユーザーの既存のコードを破ることなく新しいバージョンのAPIを作成できることを意味します。、このランニングを得る「api.rb」としてそれを保存し、いずれかのラックとしてそれを実行するには

curl -u steven:password http://example.com/api/1.0/users/steven.xml 
curl -u steven:password http://example.com/api/1.0/users/steven.json 
curl -u steven:password http://example.com/api/1.0/posts.xml 

:あなたは、ユーザーがフォームでHTTP Basicで認証できるようにすることができるはず、これを使用して

ミドルウェア、またはそうLIKE 'config.ru' ファイルを作成するには:

require 'api' 
run Sinatra::Application 

そして、そのディレクトリから:

rackup 
+0

ありがとう、Stef、Rails環境でのAPI設定の素敵な書き方については、私の質問にはあまり気にしませんが、HTTP基本認証文字列で単一のアクセストークン/ APIが提供されているときにユーザーを検証する方法。 –

+0

ああ、私は参照してください - パスワードの代わりにトークンを使用する...それを反映するために更新します。 – stef

+0

APIを設定する別の方法についての詳細な解答と発言をお寄せいただきありがとうございます。それのために私はあなたをアップフォートします。しかし、私の質問(明示的に、この特定の機能を実行するAuthlogicを強制する方法)は未だにひどく未解決です。私は自分自身で調査を続けます。 –

0

私はあなたの質問を誤解した場合私を許しますが、私は答えが単純な "いいえ"だと思います。あなたはここに2つの隠喩を混ぜています。安全なAPIキーが必要な場合は、単一のアクセストークンを使用します。 http基本アクセス認証を使用する場合は、別のbase64グリフが必要です.HTTP基本認証は特に安全です(https上で使用されない限り、一般的に実用的ではありません)。より詳細には

:ウィキペディアパー

は、http basic authenticationは、シンプルな標準が、かなり不安定なbase64でエンコードされたグリフにユーザー名とパスワードを提供することを意図しています。

は基本認証を使用するには、その後、私はあなたが簡単な

Base64.encode64("#{user.name}:#{password}") 

を経由してグリフを生成したいと考えている...と私はおそらく「あなたができることから、ユーザーが自分のパスワードを入力することによって、これを行うと思いますauthlogicがデータベースに格納するcrypted_pa​​sswordからパスワードを取得します。

しかし、これはsingle_access_tokenとは非常に異なる獣であり、2つを混在させることはできません。

+1

単一のアクセストークンをHTTP Basicユーザー名(ダミーパスワード付き)として有効にすることは、シングルアクセストークンをクエリ文字列として受け入れるデフォルトのAuthlogicの慣行よりも安全です。参考までに、SSLはすべての認証リクエストに使用されていますが、その詳細は私の適切な質問の範囲を超えています。私の質問を明確にするために、私はユーザー名/パスワード認証をAPIキーと「結合」するつもりはない。 APIキーがクエリ文字列属性ではなくHTTP Basicを介して提供されているときに、AuthlogicにAPIキーを受け入れるように指示したいだけです。 –

+0

私は、あなたが実際のユーザー名とパスワードを使用するならば、それは箱の中でうまくいくと思っていました。セキュリティに関する公正な点。生のシングルアクセストークンを使用しません。 – dondo

+0

私はsingle_access_keyについて悩んでいました。それはAuthLogicがより良いセキュリティを許可しないということを正しく嗅覚しなかった。だからもう少し研究をしました。このポスト - //http://stackoverflow.com/questions/1691330/validate-api-with-authlogic - その点について私を安心させ、あなたの問題を解決するために必要な情報を提供するように思われます。 – dondo

関連する問題