我正在爲移動應用程序設計一個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. RESTful API的設計
- 2. 在RESTful API中檢查用戶權限
- 3. 如何設計一個RESTful API,用於媒體分析引擎
- 4. RESTful URI設計
- 5. RESTful認證API設計
- 6. RESTful應用程序的Java API設計
- 7. 如何使用RESTFul方式設計計算API?
- 8. RESTful路由設計
- 9. 設計RESTful URI
- 10. 用於用戶數據的RESTful API
- 11. 使用用戶憑據訪問sharepoint api
- 12. 如何最好地設計用於啓動操作的RESTful API
- 13. 跨多個用戶的RESTful API
- 14. Twitter4j:如何從用戶獲取憑據後檢查Twitter帳戶是否存在?
- 15. 設計一個GUI來檢查MatLab中的MRI堆棧
- 16. 這是一個很好的設計來檢查用戶對數據層的訪問權限嗎?
- 17. 從Active Directory檢索用戶憑據
- 18. 如何創建一個RESTful計算器?
- 19. 安全地向RESTFUL API提供憑證
- 20. RESTful兼容設計
- 21. 我如何設置OAuth流來獲取用戶AWS憑證
- 22. 如何使用活動目錄和紅寶石腳本檢查用戶憑據
- 23. PHP - 在頁面重新加載後檢查用戶憑據
- 24. RESTful API運行時可發現性/ HATEOAS客戶端設計
- 25. 發送複雜的數據到Restful Web服務 - API設計
- 26. RESTful URL設計 - 如何使用OR參數查詢
- 27. 無法查詢restful api來檢索json對象
- 28. 如何設置訪問webservice的用戶憑據
- 29. 如何設置VirtualDirectory憑據
- 30. Rails 3 RESTful設計首選?
是的,我在每次通話時都通過了憑證設定,但是我確實需要登錄才能檢查用戶的憑證,當他們第一次打開應用程序 – wong2 2012-04-14 08:45:01
時,我沒有保留會話cookie或任何類似 – wong2 2012-04-20 12:55:57
好的 - 所以我想你必須通過憑證*用戶名/密碼*每個電話是正確的。你要麼總是要傳遞它,要麼傳遞一次會話。 – steve 2012-05-28 20:51:53