【问题标题】:REST design of authenticate calls身份验证调用的 REST 设计
【发布时间】:2012-05-19 12:34:58
【问题描述】:

在我的“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)

【问题讨论】:

    标签: api rest authentication


    【解决方案1】:

    我会将会话视为资源:

    POST /sessions
    

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

    DELETE /sessions/:sessionid
    

    删除cookie并注销。

    GET /session/:sessionid
    

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 我明确表示我不想实现 HTTP 基本身份验证,尽管我同意在许多情况下这是最好的方法。
      猜你喜欢
      • 1970-01-01
      • 2016-05-04
      • 2015-02-15
      • 2011-07-15
      • 1970-01-01
      • 2014-01-26
      • 1970-01-01
      • 2015-05-04
      • 1970-01-01
      相关资源
      最近更新 更多