【问题标题】:RESTful authentication API designRESTful 身份验证 API 设计
【发布时间】:2014-11-15 03:58:22
【问题描述】:

我有一个关于 RESTful API 设计的问题。遵循 REST 的指导方针,所有端点都应该是名词和复数形式,绝不能是动词。但是,通常将身份验证路由设置为:

/login
/logout

都是动词。如果您应该忠实于指南,这些路线应该看起来更像这样:

/users?action=login
/users?action=logout

但我从未使用过任何具有这种特定身份验证实现的 API,每个人都使用第一个,包括我在内。但我想知道这是因为很多人没有完全遵守指南,只是变成了一种习惯,还是有其他原因?

【问题讨论】:

    标签: rest restful-authentication restful-url restful-architecture


    【解决方案1】:

    如果您想遵守其他准则,您的 api 应该公开一个安全令牌资源,例如:

    /security/token

    就是这样......然后您可以获取安全令牌(登录),使用它们,然后删除它们(注销)

    【讨论】:

      【解决方案2】:

      根据stateless constraint of REST,不允许在服务器端维护客户端会话。所以你的问题没有任何意义。这些是 REST 最简单的身份验证解决方案:

      • 对于受信任的客户端,您必须在每个请求中发送用户名和密码,例如在 HTTP(基本)身份验证标头中。您必须使用加密连接。

      • 对于第 3 方(非可信)客户端,您必须通过注册向客户端添加唯一的 API 密钥。之后,当客户第一次尝试使用客户端时,您会向她显示一个对话框,她可以在其中为客户端注册唯一的访问令牌。因此,通过这种方式,她允许访问她的帐户。之后,第 3 方客户端将 API 密钥和访问令牌与与客户帐户相关的每个请求一起发送。

      回答您与 URI 相关的问题。根据uniform interface constraint:

      • 您将 URI 映射到资源而不是操作。这就是为什么它们不应该包含动词。您使用动词来选择正确的 HTTP 方法。您几乎可以将每个操作名称简化为几个 HTTP 方法和漂亮的 URI。

      • URI 对客户端没有意义,因为客户端遵循带有语义注释的超链接(例如 link relation 或 a term from an RDF vocab)。

      • 漂亮的 URI 非常适合检查您是否真的将它们映射到资源(如果不是,则它们包含动词)。

      • 当您在服务器端手动编写路由逻辑或调试请求时,好的 URI 非常有用。

      【讨论】:

        【解决方案3】:

        使用 JWT(Json Web 令牌)。它非常轻巧。

        【讨论】:

          猜你喜欢
          • 2020-08-18
          • 2011-11-28
          • 2013-08-21
          • 2012-06-04
          • 2011-06-07
          • 2012-02-09
          • 2011-10-02
          • 1970-01-01
          • 2011-11-28
          相关资源
          最近更新 更多