2014-09-18 46 views
2

我一直在堆棧溢出研究這個話題的最後一個小時,所以我想我只是問我所有的具體問題。我正在構建一個當前使用Laravel(PHP)API和Angular的Web應用程序。我看過oAuth,但它有點令人生畏,所以我希望實現一個更簡單的解決方案,然後在必要時重新構建它。RESTful API認證流程

我目前實現的流程如下。 Angular將用戶憑證(通過https)發佈到我的休息後端,並且這只是返回一個生成的字符串(這可能是隨機生成的或生成的)。然後將該字符串存儲爲cookie或任何瀏覽器狀態,然後將其附加到每個API請求以及角度作爲額外參數或請求標頭或其他內容的用戶標識。 API使用它來檢查用戶是否有權訪問請求的資源並作出相應的響應。我可能還會在每次請求後重置的字符串上添加一個到期時間。

我的問題是,如果這是一個可接受的流量?在安全方面,我最可能面對的是什麼問題? CSRF?會話固定?

我知道這是一個問題,這個問題之前已經被問了幾次,但我只是希望有新的討論並指向相關的信息。

回答

0

感謝您輸入每個人。最終,我決定再次按照建議查看OAuth 2。我試圖創建的東西幾乎都是一個OAuth流程......不是試圖重新創建輪子,而是看着其他人在PHP(和Laravel)中實現的OAuth,這個實際的實現幫助我明白了這個想法。

我到底用這個包

https://github.com/thephpleague/oauth2-server

折行laravel

https://github.com/lucadegasperi/oauth2-server-laravel

我有點不知道如何OAuth的會爲我的使用情況來實現,因爲它是僅供內部使用。我發現,因爲我對客戶有很高的信任度,所以使用的一個很好的流程就是資源所有者憑據授予。

我現在唯一真正面臨的問題是確保客戶端ID和客戶端密碼。它存儲在客戶端肯定是一個問題,但形成我的理解,這只是OAuth的一個問題。幸運的是,如果它有任何妥協,我可以撤銷並重發。

其他任何人碰到這個帶有一個類似的問題應該看看下面的鏈接:

http://alexbilbie.com/2013/02/a-guide-to-oauth-2-grants/

http://tools.ietf.org/html/rfc6749

他們真的幫助我理解的OAuth 2

1

如果我正確地理解了你,這是我在很多API中看到的模型,特別是在無狀態的SOA世界中。你所說的「字符串」通常被稱爲「授權令牌」。並且所有非公開的API方法都要求令牌(並且爲了有效 - 過期是必須的,否則有人可以拿一箇舊令牌)包含在每個請求中(帶或不帶用戶名 - 令牌應該是唯一可識別的這樣做不必要,但不會造成傷害),這意味着在您做任何事情之前,您必須先調用Login API(不需要令牌,natch)來獲取任何內容。

您可能希望在每次使用(空閒超時)時刷新您的令牌過期時間,否則您需要讓您的客戶知道他們可能需要每隔一段時間刷新一次令牌(即獲取新令牌) (比空閒超時更安全一些)。

1

你所描述的是某種基本的會話實現。由於REST具有否定這種事情的無狀態約束,我認爲這不是一個可接受的解決方案。 Afaik你必須發送用戶名和密碼來自可信賴客戶的每一個請求。如果您有第三方客戶端,則必須爲它們生成API密鑰和訪問令牌(OAuth可以解決該問題)。如果您想了解更多關於REST約束的信息,請閱讀Fielding dissertation