我需要在金字塔中创建一个 api,我认为 oauth2 可以很好地实施而不是重新发明轮子,已经安装了 pyramid_oauth2 包但不确定文档或示例。有人知道任何好的资源吗?一个 github 项目或 oauth2 服务提供商的东西会很好。
1 回答
如果你在谈论我的包裹,这里是我网站上的一个样本。它仍然是相当实验性的,但它应该可以与 facebook 和其他一些 oauth2 提供商一起使用。不幸的是,twitter事实上只有oauth1.0,这是一个问题。
所以你需要像这样包含 pyramid_oauth2
config.include('pyramid_oauth2')
或者在 config.ini 文件中。
然后,您可以在包含配置后将其添加到其他地方:
config.add_oauth2_provider(
Provider(
'vkontakte',
'client_id',
'client_secret',
'https://api.vk.com/oauth/authorize',
'https://oauth.vk.com/access_token'
)
)
这将创建一个路径/oauth/vkontakte/authenticate
。这是重定向流的请求开始的地方。然后它将重定向到authorize url
并且它还创建一个/oauth/vkontakte/callback
接收代码的哪个。然后它将该代码发送回access_token
路径。
如果某些东西不起作用,请随时报告一些问题,可以向Provider
构造函数发送额外的参数,例如作用域等。目前这些参数是针对所有请求发送到服务器的。
哦,您必须向提供者提供回调函数。我将通过回调等示例更新答案。
如果还不清楚,我可以用 facebook 制作一个小示例应用程序,并在今天或明天将其推送到 github 上。
回调只是一个可调用的接收request
和data
,访问令牌应该包含在数据中。
我想到获取访问令牌的方式应该很简单,一旦收到访问令牌,就应该可以执行一些标准回调来注册 oauth api 等等。我相信并不是每个人都在寻找 oauth,只是为了对 facebook connect 等网站进行身份验证。可能有兴趣将 access_token 用于身份验证以外的其他用途。此外,由于金字塔与 sqlalchemy 和其他数据库无关,因此它不强制执行任何操作。换句话说,用 ZODB 实现它,SQLAlchemy 应该很容易。
我相信流程实际上非常简单,而且我实际上(我猜)并没有为当前的客户端流程正确实施 oauth2。缺少一些属性,例如grant_type 等。它们可以作为额外参数传递,但取决于 oauth2 服务器,它可能无法在任何地方正常工作。
顺便说一句,我希望将提供程序添加到 ini 文件中,以便可以从那里加载它们而不是在代码中。这样你就可以为 dev、prod 等维护不同的应用程序。