Restful设计,如何创建授权服务

Posted

技术标签:

【中文标题】Restful设计,如何创建授权服务【英文标题】:Restful design, how to create an authorization service 【发布时间】:2014-06-24 19:01:52 【问题描述】:

我正在设计我的第一个 RESTful API,但对一些事情感到困惑。

到目前为止,我正在正确使用状态代码、名词和动词,所以发到 http://domain.com/api/contacts 的 POST 将创建一个新的联系人等。

我现在正在设计我的登录表单并且不会使用 HTTP 身份验证,我将获取一个 json Web 令牌并将其存储在一个 cookie 中。我的问题是这些..

1) 登录服务使用什么名词,我认为 api/login 是错误的。我正在发布用户名和密码,并期望发生登录并发送回 JWT。我不是在创建用户,也不是真的在获取用户,所以我不知道该怎么称呼它。

2)我在另一个 SO 答案中读到,如果对 API 进行调用并且令牌无效(如果它在前端过期,则永远不会进行调用),那么 403 是正确的状态代码,但是如何区分“登录令牌无效”和“登录有效但用户试图访问其他人的内容”。

3) 如果用户正在登录并发送了错误的凭据,那么正确的状态代码是什么?它似乎是 401,但其他答案说不要使用它,因为浏览器会显示一个密码框。

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:
    POST /auth-tokens 如果您返回带有 403 响应的实体,则可以包含该信息 如果用户通过 POST 到 auth-tokens 登录,您可以返回 403 Forbidden。来自the spec:

服务器理解请求,但拒绝执行。授权将无济于事,并且不应重复请求。 [...] 如果请求方法不是 HEAD 并且服务器希望公开请求未完成的原因,它应该在实体中描述拒绝的原因。

您可以使用实体来解释登录失败的原因。

【讨论】:

以上是关于Restful设计,如何创建授权服务的主要内容,如果未能解决你的问题,请参考以下文章

从 RESTful 身份验证迁移到设计

使用 Python 和 Flask 设计 RESTful API

如何设计一个 RESTful API 来检查用户的凭据?

如何设计好的RESTful API

如何设计好的RESTful API

RESTful HTTP API 中的授权,401 WWW-Authenticate