我正在爲傳統PHP站點添加REST API。這是爲內部應用程序提供端點,所以我在設計事物和做什麼以及不支持時都很自由。爲PHP REST API實現簡單身份驗證
我現在需要添加到此API中的方式是登錄,然後以特定用戶身份執行操作。該網站已建成多年前,並不一定與當時的最佳做法,所以我不幸在我如何做到這一點上受到限制。所有這些都需要使用MySQL 5.6運行在PHP 5.4中。
我一直在閱讀常見的設計和OAuth1/2看起來像最常見的標準。然而,這對於我的目的來說似乎是大規模的矯枉過正,因爲它具有我不需要的各種功能,並且實現起來似乎非常複雜。
相反,我打算只是在做這樣的事情:
- 客戶端調用
get_session
API端點,它生成一個隨機會話ID,將保存在數據庫中的表,並返回到客戶。 - 客戶端保存此會話ID。
- 然後,客戶端通過向
login
端點發送請求進行身份驗證,發送用戶名,密碼和會話ID(顯然通過HTTPS)。 - 服務器將數據與用戶表進行比較,如果登錄正確,則更新會話表以將會話ID與相應的用戶ID相關聯。這需要通過某種方式來限制速度,以防止暴力強制。
- 現在,客戶端可以調用任何其他端點,只提供其授權的會話ID。
- 在每個請求上,服務器查找會話ID,查看與哪個用戶關聯並執行正確的操作。
- 客戶端可以記住會話ID以備將來使用,直到它被手動刪除或在一段時間後過期。
- 要註銷,客戶端向
logout
端點發送請求,服務器將刪除與該用戶帳戶的關聯。
這是一個合理的設計?這顯然不是很複雜,但我正在尋找一些我可以實現而不需要很大麻煩或需要第三方庫的東西。
只需使用基本訪問驗證和HTTPS即可。 – DanielO
和往常一樣,downvoters應該留下解釋性評論。對於它的價值來說,這似乎是一個經過深入研究的詳細問題。我也不同意這是「主要基於意見」。肯定有一套最佳實踐,這是一個很好的答案,就像Sammitch所做的那樣。 –