Api 认证调用的REST设计

Api 认证调用的REST设计,api,rest,authentication,Api,Rest,Authentication,在我的“RESTAPI”中,我想使用一些基于令牌/基于cookie的身份验证。这意味着,在消费者可以使用API之前,消费者需要通过使用用户名/密码调用某个身份验证URL来获取该令牌 只返回一个设置的Cookie头可以吗 我认为它实际上违反了REST原则,但是如果没有HTTP基本身份验证(这意味着在每个请求中发送username/pwd),您将如何做到这一点(或者设计URI和谓词) 也许是这样 GET api/authentication/signin/?username=abc&pwd=

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

只返回一个设置的Cookie头可以吗

我认为它实际上违反了REST原则,但是如果没有HTTP基本身份验证(这意味着在每个请求中发送username/pwd),您将如何做到这一点(或者设计URI和谓词)

也许是这样

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

那么注册呢

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


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


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

我会将会话视为一种资源:

POST /sessions
创建会话并返回cookie

DELETE /sessions/:sessionid
删除cookie并注销

GET /session/:sessionid
检查会话是否有效(例如Cookie未过期或以其他方式无效)


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

我明确表示,我不想实现HTTP基本身份验证,尽管我同意在许多情况下这是最好的办法。
DELETE /sessions/:sessionid
GET /session/:sessionid