如何实现REST API的身份验证?

时间:2012-07-16 07:41:45

标签: python api authentication rest oauth

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

我正在使用python,flask,mongodb。

1 个答案:

答案 0 :(得分:11)

我们使用OAuth 2(比OAuth 1更受欢迎)解决了以下问题。特别是我们正在使用resource owner password credentials流程。至于如何将它集成到我们的RESTful服务中,这是一个想法:

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

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

良好的RESTful设计表明与此rel的链接指向例如http://myapi.com/users,并且API的消费者对该端点执行POST,该端点向其返回新的用户资源,其中Location标头指向新创建的用户资源,例如, http://myapi.com/users/username。 (用户资源本身当然是另一个rel,区分单个用户资源和多个用户集合资源。)