0

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

只返回一个 Set-Cookie Header 可以吗?

我认为它实际上违反了 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)
4

2 回答 2

0

对于用户名/密码身份验证,我将使用 HTTP 基本身份验证

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

优点是大多数 HTTP 客户端库开箱即用地支持它。如果您需要,可以使用更高级的方法(摘要、oauth 等)。我会尽量不发明自己的东西,我会避免使用饼干。

于 2012-05-11T14:50:28.747 回答
0

我会将会话视为资源:

POST /sessions

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

DELETE /sessions/:sessionid

删除 cookie 并注销。

GET /session/:sessionid

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

但我认为您还应该实现基本身份验证或其他一些标准方案,并要求您的自定义会话内容通过它进行身份验证,而 API 的其余部分也可以通过 cookie 使用会话数据。

于 2012-05-12T14:17:41.973 回答