2015-12-19 167 views
0

我正在使用基於JWT令牌的身份驗證來驗證暴露給移動應用程序的REST API。我有一個登錄API,用戶將會在這裏登錄並獲取JWT作爲回覆。應用程序必須爲其餘的請求使用JWT令牌。在開發過程中遇到的一個問題是。其餘基於API JWT令牌的認證安全| laravel/dingo/jwt

一旦我給用戶一個身份驗證令牌,他可以訪問其餘的API集。

用戶與JWT令牌T1試圖訪問的用戶資源能夠在我的當前設計這是在我的系統的一個缺陷。在每個請求上,我必須檢查令牌中的用戶標識和請求進程請求的用戶標識是否匹配,然後繼續?或者有沒有更好的方式來處理這個問題?

我正在使用laingvel框架,使用dingo rest和JWT lib。

更新

如:

我作爲一個個體得到了來自應用程序的端點。我登錄並收到了我的jwt令牌,這些令牌在我的其他資源中都是有效的。現在得到的我都使用不同的用戶添加的產品清單id.I能做到這一點在頭

GET /products/3 and 3 is not my user id! 

在這種情況下

我的JWT令牌這種方式,我只是確認一個智威湯遜的道理,這將驗證它並回應與不是礦山的資源!

+0

您可以使用Laravel的新Gate/Auth系統來做到這一點。 http://laravel.com/docs/5.1/authorization –

回答

0

TL; DR:這是非常常見的使用它,你應該是這樣的好方法!

更多細節: 這裏的要點是,令牌是「夠隱晦」,以便有一個機會可以忽略不計的非授權用戶從授權用戶獲得的令牌。在你的例子中,這意味着,用戶2可以以非常高的概率猜測用戶1正在使用的令牌。

當然,這種方式可能會減少中間人攻擊,因此您應該確保只通過安全連接傳輸令牌。我建議「僅限HTTPS」。此外,您可能只想在標頭中發送和接收標記,因此它們不會在任何內容視圖中公開。

稍微有些背景:想想PHP "standard" session cookies是如何工作的:用戶(客戶端)獲取cookie中的會話ID並將其發回。這與您在JWT中所做的基本相同,因爲用戶2也可能以某種方式從用戶1那裏竊取cookie,並以他的名義行事。智威湯遜甚至爲您提供了一個級別,您可以輕鬆確認您實際發佈的令牌(假設您使用的是RSA-keypair-style方法),我認爲這比PHP會話ID cookie方法更具優勢。

+0

據我瞭解你的更新問題,你不做任何[ACL](https://de.wikipedia.org/wiki/Access_Control_List)然後檢查用戶,對?我建議將用戶標識存儲在令牌中(並使用用戶標識進行ACL檢查!) - 如果id不同,簽名必須不同,如果您自己沒有簽發令牌,則簽名將不匹配。如果這是你的觀點,請讓我知道,我會很樂意更新我的答案:) – ArSeN

+0

如何在laravel上做到這一點。你能舉一些實際的例子嗎? – Ajeesh

+0

我不想在這裏複製laravels文檔。正如你在對你的問題的評論中指出的那樣,你可以用laravels Gate/Auth系統來做到這一點。訪問權在這裏被稱爲「能力」,並且在[文檔(檢查能力)]中找到大量示例(http://laravel.com/docs/5.1/authorization#checking-abilities)。 – ArSeN