2013-04-07 319 views
12

我有一個簡單的REST API(使用超薄框架)設置,用戶可以調用一個頁面是這樣的:API客戶端密鑰

subdomain.domain.com/api/musician/id/3273 

檢索和顯示一些簡單的JSON數據。

我想爲此添加一些身份驗證,以便只有具有某種客戶端ID(至少)的用戶才能訪問此數據。我希望用戶能夠在URL中傳遞他們的客戶機祕密/ ID信息,但是我希望能夠避免在REST結構中亂用太多的東西。

是否有某種框架或庫對實現這一目標特別有效?

+0

一些API服務需要你送的東西喜歡在請求的報頭中的CLIENT_ID。用戶可以使用cURL將自定義標題添加到他們的請求中,然後您可以在腳本中訪問它們。 – Xeoncross 2013-04-22 13:48:06

回答

8

我也是,有這個問題一段時間,我也有一個問題沒有關於這個話題(這裏如此)的答案。

基本上你的選擇是OAuth或自定義的東西。

現在,對於oauth,他們正在使用2.0版本,並且您不應該使用OAuth 1啓動一個新項目,但事實是,oauth2遠遠沒有完成,並且對oauth2服務器的支持很少PHP現在。我不想說oauth2兩腿/三腿是複雜的,但它比它應該更多,並且在閱讀了很多關於這個的帖子之後,我決定現在,我應該與其他東西一起去,而不是oauth(也是oauth的創造者之一,因爲他對這個項目的方向不滿意而離開了這個項目),因爲它處於「未定的」狀態(當然人們會爭辯說,它已經準備好使用了,但我不在乎,我想要已經證明的東西,不想成爲大公司測試oauth的實驗室老鼠[是的,oauth是爲了巨大的公司利益,而不是你的])。

無論如何,回到我的問題,我總是喜歡亞馬遜與他們的api一起工作的方式,它的實現非常簡單,所以爲什麼不去同一個方向?我的意思是,亞馬遜是最大的API提供商之一,如果他們使用它,他們有一個真正的理由這樣做。
說了算,在不到兩個小時的時間裏,我的身份驗證/授權協議開始運行,猜測是什麼,這很容易,簡單,我喜歡寫它(不會因爲oauth而感到沮喪)。 幫助我開始的一篇好文章是:http://www.thebuzzmedia.com/designing-a-secure-rest-api-without-oauth-authentication/,它基本上可以預見你必須做的事情。

所以,如果我是你,我就從那裏:)

+5

您的鏈接已斷開 – 2016-11-25 05:04:11

1

因爲REST是無狀態的,所以如果你想爲不同的用戶提供不同的數據表示(ergo-stateful),那麼你幾乎需要屠宰它,這意味着每個請求你都會提供與用戶狀態無關的數據針對具體實體。

因此,無論是每次驗證用戶,還是臨時Cookie +會話,或者如果您有第三方參與,都需要OAuth。

Dave Ingram - API Design presentation

2

見也許這可能是有用的slim HttpBasicAuth

您可以使用HTTP基本身份驗證每個請求驗證如果做請求的用戶是有效用戶。

5

如果您的API客戶端不「代表」你的用戶代理則OAuth是矯枉過正在我看來開始。

您可以發出的標準API密鑰將起作用。如果需要,您也可以添加請求籤名。

一些苗條的例子:herehere

相關問題