RESTful身份验证API设计

3

我有一个关于RESTful API设计的问题。按照REST的指南,所有端点应该是名词且为复数形式,而不应该是动词。但是,惯例上认为身份验证路由应该是:

/login
/logout

这两个词都是动词。如果你要忠实于指南,那么这些路由应该像下面这样:

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

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

3个回答

7
如果你想符合REST指南,你的API应该像以下方式公开一个安全令牌资源:

/security/token

仅此而已... 你可以通过GET请求获取安全令牌(登录),使用它们,然后通过DELETE请求将其删除(退出登录)。


1
根据REST的无状态约束(stateless constraint of REST),在服务器端维护客户端会话是不允许的。因此,您的问题没有任何意义。这些是REST中最简单的身份验证解决方案:
  • 对于受信任的客户端,您必须在每个请求中发送用户名和密码,例如在HTTP(基本)身份验证标头中。您必须使用加密连接。

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

为了回答您关于URI的问题,根据统一接口约束(uniform interface constraint)

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

  • 对于客户端来说,URI没有意义,因为客户端遵循带注释语义(例如链接关系来自RDF词汇表的术语)的超链接。

  • 漂亮的URI对于检查是否真正将它们映射到资源很有用(如果没有,则它们包含动词)。

  • 在手动编写服务器端路由逻辑或调试请求时,漂亮的URI很有用。


-4
使用JWT(Json Web Token)。它非常轻量级。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接