1

我需要在金字塔中创建一个 api,我认为 oauth2 可以很好地实施而不是重新发明轮子,已经安装了 pyramid_oauth2 包但不确定文档或示例。有人知道任何好的资源吗?一个 github 项目或 oauth2 服务提供商的东西会很好。

4

1 回答 1

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 上。

回调只是一个可调用的接收requestdata,访问令牌应该包含在数据中。

我想到获取访问令牌的方式应该很简单,一旦收到访问令牌,就应该可以执行一些标准回调来注册 oauth api 等等。我相信并不是每个人都在寻找 oauth,只是为了对 facebook connect 等网站进行身份验证。可能有兴趣将 access_token 用于身份验证以外的其他用途。此外,由于金字塔与 sqlalchemy 和其他数据库无关,因此它不强制执行任何操作。换句话说,用 ZODB 实现它,SQLAlchemy 应该很容易。

我相信流程实际上非常简单,而且我实际上(我猜)并没有为当前的客户端流程正确实施 oauth2。缺少一些属性,例如grant_type 等。它们可以作为额外参数传递,但取决于 oauth2 服务器,它可能无法在任何地方正常工作。

顺便说一句,我希望将提供程序添加到 ini 文件中,以便可以从那里加载它们而不是在代码中。这样你就可以为 dev、prod 等维护不同的应用程序。

于 2012-08-03T05:55:04.570 回答