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

Posted

技术标签:

【中文标题】如何实现 REST API 的身份验证?【英文标题】:How to implement authentication for REST API? 【发布时间】:2012-07-15 01:06:22 【问题描述】:

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

我正在为此使用 python、flask、mongodb。

【问题讨论】:

【参考方案1】:

我们已经解决了以下问题,使用 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,区分单数用户资源和复数用户集合资源。)

【讨论】:

以上是关于如何实现 REST API 的身份验证?的主要内容,如果未能解决你的问题,请参考以下文章

REST API 中基于令牌的身份验证

如何通过查询身份验证保护 REST API

如何从具有基本身份验证的 rest api 获取数据?

Mongolab REST API 如何进行身份验证

Mongolab REST API 如何进行身份验证

如何在 Laravel 中为 REST API 创建身份验证