2012-07-30 143 views
10

我已經實現了一個REST API並使用門衛進行了保護。 我已經寫了一個小型客戶端程序來訪問它,它使用資源所有者憑據流很好地工作。在OAuth中使用客戶端憑證與門衛發佈

現在我正在嘗試使用客戶端憑據flow實現呼叫。所以我按照鏈接中的例子。

當我使用GET請求時,一切正常,但當我使用POST請求時,我得到一個401 Unauthorized。這是對不需要資源所有者的方法的調用。

我在API控制器唯一實質性的事情是:

doorkeeper_for :all 

我還沒有實現任何範圍或沒有那種(我需要什麼?)。

我的客戶代碼如下所示(完全是在example in github):

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}" } 

任何想法,我可能是做錯了什麼?爲了啓用客戶端憑據流,我的應用程序中是否應該執行某些特殊操作?

回答

16

我想通了。問題是我沒有正確使用RestClient.post。第二個參數應該是有效載荷,第三個參數應該是標題。它應該是這樣的:

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

讀你的答案幫助我解決了我遇到的一個問題。感謝您回來解決這個問題! – lyonsinbeta 2013-10-15 03:35:14

相關問題