python - 如何为 REST API 实现身份验证?

标签 python api authentication rest oauth

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

我为此使用了 python、flask、mongodb。

最佳答案

我们已经解决了以下问题,使用 OAuth 2 (这比 OAuth 1 更可取)。特别是我们正在使用 resource owner password credentials流动。至于如何将其集成到我们的RESTful服务中,思路如下:

  • 初始资源在被未经授权的用户访问时返回 401。401 的主体包含一个链接,带有 rel=oauth2-token。 . (您如何指示链接取决于您的媒体类型;我们使用 HAL ,但您甚至可以只使用 Link header 。)
  • 用户通过身份验证后,他返回初始资源,在他的 Authorization header 中发送从 OAuth 2 进程返回的不记名 token 。此时,我们返回 200,其中包含所有可用的正常链接。

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

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

关于python - 如何为 REST API 实现身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11499995/

相关文章:

java - Java Rest API 初始化数据的最佳方法是什么?

python - 如何使用 Python 创建与语言无关的库?

javascript - 如何判断用户何时登录 | express | Passport | Node

PHPBB登录脚本

Python:计算两个矩阵的相似元素

python - math.lcm() 给出错误 "Module ' math' 没有 'lcm' 成员”

python - 在 Flask 中使用 SQLAlchemy 创建数据库

python - 以 'e'结尾的英语动词处理

Django 将reverse()与包含相同应用程序的多个URL一起使用

node.js - OAuth2服务器: invalid or missing grant_type parameter