10

我正在创建一个基于 Web 的服务,我想将其公开为 REST API,以便开发人员能够使用它创建应用程序。我希望开发人员能够创建/管理用户帐户并通过 API 进行身份验证。如何处理?OAuth 还是其他?

我为此使用 python、flask、mongodb。

4

1 回答 1

11

我们已经解决了以下问题,使用OAuth 2(比 OAuth 1 更可取)。特别是我们正在使用资源所有者密码凭证流程。至于如何将其集成到我们的 RESTful 服务中,思路如下:

  • 初始资源在被未经授权的用户点击时返回 401。401 的正文包含单个链接,带有rel=oauth2-token. (您如何发出链接信号取决于您的媒体类型;我们使用的是HAL,但您甚至可以只使用Link标题。)
  • 用户进行身份验证后,他返回到初始资源,在其Authorization标头中发送从 OAuth 2 进程返回的不记名令牌。此时,我们返回 200,所有正常链接都可用。

我们不会公开帐户创建,但如果您想这样做,我会使用初始资源中未经授权的用户可用的另一个链接来这样做。该链接将具有自定义rel,因为它特定于您的应用程序,例如rel=http://rels.myapi.com/users

良好的 RESTful 设计将表明与 this 的链接rel指向 eg http://myapi.com/users,并且 API 的使用者POST对该端点执行 a 操作,该端点向他们返回新的用户资源,其Location标头指向在 eg 处新创建的用户资源http://myapi.com/users/username。(用户资源本身当然是另一种rel,区分单数用户资源和复数用户集合资源。)

于 2012-07-16T07:49:37.587 回答