2012-07-16 89 views
10

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

我正在使用python,flask,mongodb。

回答

10

我们使用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

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