0

我正在尝试理解 OAuth,但我很难弄清楚这个基本的东西......

我开发了一项服务(使用 Python 和 Flask),它通过专用的登录名和密码组合支持经典身份验证,以及 webapp 形式的“官方”客户端。我希望我的服务支持 OAuth 并查看了flask-oauthprovider,这似乎非常适合这项任务,但我似乎无法理解一切应该如何表达。

我的问题是:

  1. 今天,我所有的 API 入口点都要求用户登录:一旦我的服务支持 OAuth,每个入口点是否应该变成“oauth_required”而不是“login_required”?
  2. 支持我的“官方”webapp 前端的正确方法是什么?我宁愿不让它通过常规的 OAuth 流程(使用额外的重定向来登录服务)。它应该通过自动授予访问令牌的 OAuth,还是应该绕过 OAuth 并直接使用“资源所有者”登录名和密码?
4

1 回答 1

0

我认为 oauthlib 背后的概念的一个问题是它太努力地成为一切,结果是一组难以推理的抽象(这与 python-oauth2 方法非常相似)。OAuth 提供者尤其棘手,因为您隐含地需要保留诸如令牌之类的东西,更不用说假设某种预先存在的用户管理了。因此,从一个框架到另一个框架,一个“好的”或惯用的实现往往更加固执己见。在我看来,这就是为什么我们没有将单个 Python OAuth 提供程序实现视为抽象的部分原因:没有很好的解决方案,但有很多混乱的解决方案。查看 flask-oauthprovider,我们看到了这些问题的一些直接示例。我维护的烧瓶登录也有类似的问题。好歹,Flask中“正常工作”的 OAuth 提供程序;随意查看并根据您的需要进行调整。它假设了一些东西,比如 MongoDB,但我认为任何数据存储都可以使用。

1) 保护您希望通过第三方访问的任何端点,例如您的公共 API。

2)我会避免自动访问令牌,这会破坏基于每个用户协商授权的人,除非您当然有不同的方案,例如一组预定义的客户端。我相信您所说的第二个选项是 xauth,在这种情况下,为什么不直接使用 OAuth 2.0 和 grant_type=password?不记名令牌在概念上相似,但只要您可以提供 HTTPS,实现起来可能会更容易一些。

于 2013-04-29T13:06:17.323 回答