身份驗證和會話是很少真正RESTful的區域,因爲它們是有狀態的,除非您爲每個請求傳遞完整的身份驗證憑證。
這是我做的,和你的相似,只有一個很大的區別。
POST /session/ --> creates a session, passing credentials in HTTP Auth Header
如果成功,以及會話ID,就像真實資源一樣,上面將返回201。它還包含Cookie中的會話令牌(以及特殊的X-
類型的HTTP標頭),可用於每個後續請求中。
GET /protectedResource --> includes the credential in the HTTP header
並終止/無效會話,這是一個常見的活動,如點擊「註銷」
DELETE /session/sessionId
從你做了什麼,唯一真正的區別是,我會從未在查詢路徑或主體中傳遞令牌和憑證。唯一的例外是如果你想做基於表單的認證並提交,但即使如此,當我可以的時候,我更喜歡處理Web端並提交爲標題。
的原因是2倍:
- 你希望能夠揭露URL不會暴露任何祕密
- 你希望能夠重複使用的URL不暴露
HTTP auth的另一個優點是(它在頭文件中)是它變得很容易使用curl來測試你的REST API:
curl --user username:pass http://server/protectedResource
而且你甚至可以生成會話令牌並在curl中使用它們。
如果你是舒服的NodeJS,你可以看一下README和源代碼cansecurity http://github.com/deitch/cansecurity
A /爲什麼不使用HTTP認證? b /爲什麼不使用會話cookie,它位於http標題中,不需要出現在你的url中? – njzk2
請檢查這個答案,看看是否有幫助。 [這裏](http://stackoverflow.com/questions/19010067/restful-login-proper-implementation/19024952#19024952) – Satish