认证呼叫的REST设计

在我的“REST API”中,我想使用一些基于令牌的/基于cookie的身份验证。 这意味着,在消费者可以使用API​​之前,消费者需要通过调用一些带有用户名/密码的认证URL来获得该令牌。

是否可以返回一个Set-Cookie头?

我认为它实际上违反了REST原则,但是如果没有HTTP Basic Auth(这意味着在每个请求中发送用户名/密码),你会怎么做(或设计uris和动词)?

也许这样?

GET api/authentication/signin/?username=abc&pwd=123
GET api/authentication/signout

要么?

GET    api/user/authtoken/?username=abc&pwd=123    (signin)
DELETE api/user/authtoken/     (signout)
GET    api/user/               (returning details of the current user)

那么注册怎么样?

POST    api/user/   (which would also return an authtoken)

要么?

GET    api/user/abc/authtoken/?pwd=123    (signin of user abc)
DELETE api/user/abc/authtoken/     (signout)
GET    api/user/abc/               (returning details of user abc)

我会将会话视为资源:

POST /sessions

创建一个会话并返回一个cookie。

DELETE /sessions/:sessionid

删除cookie并注销。

GET /session/:sessionid

检查会话是否有效(例如,Cookie未过期或以其他方式失效)。

但我认为你还应该实现Basic Auth或其他一些标准的方案,并且需要通过它来验证自定义会话内容,而其余的API也可以通过Cookie使用会话数据。


对于用户名/密码认证,我会使用HTTP基本认证

http://en.wikipedia.org/wiki/Basic_access_authentication

好处是大多数HTTP客户端库支持它的开箱即用。 更高级的方法存在,如果你需要它们(摘要,oauth等)。 我会尽量不发明自己的,我会避免cookies。

链接地址: http://www.djcxy.com/p/7921.html

上一篇: REST design of authenticate calls

下一篇: Best practice for partial updates in a RESTful service