2012-07-30 8 views
10

私はREST APIを実装し、それをドアキーパで保護しました。 私はそれにアクセスするための小さなクライアントプログラムを書いており、リソース所有者資格フローを使ってうまく動作します。DoAのクライアント資格情報を使用したOAuthでの投稿

今、クライアントの資格情報flowを使用して呼び出しを実装しようとしています。だから私はリンクの例に従った。

GETリクエストを使用しているときはすべてうまく動作しますが、POSTリクエストを使用しているときは401 Unauthorizedになります。これは、リソース所有者を必要としないメソッドへの呼び出しです。

私は私のAPIコントローラを持っているだけで、関連する事は次のとおりです。

doorkeeper_for :all 

私は(私はに必要なのでしょうか?)その種のいずれかのスコープまたは何も実装していません。

require 'rest-client' 
require 'json' 

client_id = 'my_client_id...' 
client_secret = 'my_client_secret...' 

response = RestClient.post 'http://localhost:3000/oauth/token', { 
    grant_type: 'client_credentials', 
    client_id: client_id, 
    client_secret: client_secret 
} 
token = JSON.parse(response)["access_token"] 

# this line works great: 
RestClient.get 'http://localhost:3000/api/v1/flights.json', { 'Authorization' => "Bearer #{token}" } 
# this line always fails (401 Unauthorized): 
RestClient.post 'http://localhost:3000/api/v1/flights.json', { 'Authorization' => "Bearer #{token}" } 

任意のアイデア私が間違ってやっていることがあります。

私のクライアントコードは(正確にexample in githubのように)このように見えますか?クライアント資格情報フローを有効にするために、アプリケーションで何か特別なことはありますか?

答えて

16

私はそれを理解しました。問題は、RestClient.postを適切に使用しなかったことです。 2番目のパラメータはペイロードで、3番目のパラメータはヘッダーにする必要があります。これは次のようなものでなければなりません:

RestClient.post 'http://localhost:3000/api/v1/flights.json', {}, { 'Authorization' => "Bearer #{token}" } 
+2

私の問題を解決するのに役立ちました。戻ってきて、これを解決してくれてありがとう! – lyonsinbeta

関連する問題