身份验证和会话是很少真正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