2013-04-29 20 views
0

我想了解的OAuth,和我有一个很难搞清楚这个基本的东西...OAuth的服务和官方客户端的支持

我已经开发出一种服务(Python和烧瓶),其支持通过专用登录&密码组合的经典认证,以及以webapp形式的“官方”客户端。我希望我的服务能够支持OAuth并查看flask-oauthprovider,这看起来非常适合完成此任务,但似乎无法理解每件事情应该如何表达。

我的问题是:

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

回答

0

我认为oauthlib背后的概念有一个问题,那就是它试图做得太难以成为一切,其结果是一组难以理性的抽象(这与python非常相似) oauth2方法)。特别是OAuth提供商是棘手的,因为你隐含地需要坚持像令牌一样的东西,而不是提到某种预先存在的用户管理的假设。因为这样一个“好”或惯用的实现往往更多地从框架到框架。在我看来,这是为什么我们没有看到一个Python OAuth提供者实现作为抽象的一部分:那里没有很好的解决方案,但是很多杂乱的。看着瓶子,我们看到这些问题的一些直接例子。我有类似的问题与烧瓶登录,我保持。无论如何,在过去的这个周末,我写了一篇非常粗糙的第一遍“OAuth provider in Flask”,它们“刚刚起作用”。随时查看并适应您的需求。它假设了一些东西,比如MongoDB,但是我认为任何数据存储都可以使用,但工作量很小。

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

2)我会避免自动访问令牌,这会打败每个用户谈判授权的人,除非你有不同的方案,例如,一组预定义的客户端。我相信你谈论的第二个选择是xauth,在这种情况下,为什么不使用OAuth 2.0和grant_type = password?承载令牌在概念上是相似的,但只要您可以提供HTTPS,实现起来可能会稍微简单一些。