我正在爲移動應用程序設計一個API,並且我希望將它保持爲RESTful。
API的授權使用Basic HTTP Auth,但是,當用戶第一次打開應用程序時,他需要先登錄,所以我需要設計一個API來檢查用戶的憑據,它將接受一對用戶名和密碼密碼,返回成功或相應失敗。
問題是什麼網址應該是這樣,它是寧靜的?我不認爲/登錄是一個好的。如何設計一個RESTful API來檢查用戶的憑據?
回答
一個好方法是對當前用戶的帳戶/資料信息執行GET
請求。並讓它返回用戶名,設置,頭像網址等。me
是經常用作認證用戶的簡寫標識符。
GET https://api.example.com/profiles/me
HTTP/1.1 200 OK
{
"username": "bob",
"id": "xyz",
"created_at": 123,
"image_url": "https://example.com/bob.png"
}
維基百科:
的客戶機 - 服務器通信由沒有客戶 上下文進一步限制被存儲請求之間的服務器上。來自 的每個請求都包含爲服務 請求所需的所有信息,並且任何會話狀態都保留在客戶端中。
因爲服務器存儲從客戶端沒有會話狀態,你的API 應該不會暴露任何登錄/註銷功能:在每一個要求,你應該發送用戶憑據,服務器應該每次都驗證它們。
檢查this discussion in SO,它克服了這個概念。
我同意卡洛斯 - 在一個正常的寧靜的API中,沒有會話,所以你不能驗證一次然後重新使用會話,你實際上需要在每次調用時都傳遞憑據集(不理想)。
在這種情況下,它聽起來像你會更好地使用openAuth(http://www.oAuth.net)之一 - 這是通過驗證應用程序第一次運行時的身份驗證,然後生成訪問令牌以允許在每次通話中訪問(+刷新令牌)。
(你可能會認爲訪問令牌是狀態 - 它的類型 - 但是,至少它通常會長得多)。
它通常被認爲是不好的做法,通過HTTP GET
請求通過敏感數據。
密碼信息是敏感數據,是破壞idempotent operations應該是GET
請求的規則之一。
爲什麼這是一個例外?瀏覽器歷史記錄和服務器日誌將存儲GET
請求。這意味着這兩個地方的敏感信息在純文本中都是可見的。所以,如果有人得到任何一個 - 那麼這些信息現在掌握在他們手中。
您應該使用HTTP POST
請求將此敏感信息傳遞給RESTful API,因爲瀏覽器不會存儲它們,並且服務器不會記錄它們。但是,第一道防線是使用安全HTTP(HTTPS)來確保這些信息不受外界的干擾。
因此,將此信息通過HTTP請求的正文傳遞給HTTPS URL。
GET https://api.example.com/auth
隨着授權報頭組。
- 1. Rails RESTful API +設計 - 如何檢查用戶的憑據
- 2. 如何正確設計一個restful API來使緩存失效?
- 3. RESTful API的設計
- 4. 在RESTful API中檢查用戶權限
- 5. 爲RESTFUL API設計一個Web Interface
- 6. 一個後端Restful API設計考慮
- 7. 設計一個RESTful認證API
- 8. 如何設計一個RESTful API,用於媒體分析引擎
- 9. 小工具的RESTful URL設計檢查
- 10. 我應該如何設計一個RESTful URL來驗證對象
- 11. RESTful URI設計
- 12. RESTful API - 設計子資源
- 13. RESTful認證API設計
- 14. 試圖檢查來自兩個不同的mySQL表的用戶憑據
- 15. RESTful應用程序的Java API設計
- 16. 如何使用RESTFul方式設計計算API?
- 17. RESTful路由設計
- 18. javax RS:檢查RESTful API peremeter
- 19. 設計RESTful URI
- 20. 用於用戶數據的RESTful API
- 21. 緩存API的用戶憑據
- 22. 使用用戶憑據訪問sharepoint api
- 23. 如何最好地設計用於啓動操作的RESTful API
- 24. 如何設計用於分層實體的RESTful API
- 25. 設計一個數據庫來存儲用戶的能力
- 26. 的RESTful API設計的最佳實踐
- 27. API設計 - 一個域上的應用程序,另一個域上的api。如何檢索用戶特定的數據,而無需傳遞用戶ID
- 28. 根據工作組服務器檢查用戶憑證
- 29. 在django中檢查用戶憑證
- 30. Restful API服務器的建築設計
是的,我在每次通話時都通過了憑證設定,但是我確實需要登錄才能檢查用戶的憑證,當他們第一次打開應用程序 – wong2 2012-04-14 08:45:01
時,我沒有保留會話cookie或任何類似 – wong2 2012-04-20 12:55:57
好的 - 所以我想你必須通過憑證*用戶名/密碼*每個電話是正確的。你要麼總是要傳遞它,要麼傳遞一次會話。 – steve 2012-05-28 20:51:53