我需要在金字塔中制作一个api,我认为oauth2可以很好地实现不重新发明轮子,已经安装了pyramid_oauth2包但不确定文档或示例。谁知道有什么好资源?一个github项目或oauth2服务提供商的东西会很好。
答案 0 :(得分: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等等。我相信不是每个人都只是为了对facebook连接等网站进行身份验证而寻找oauth。有人可能有兴趣使用access_token而不仅仅是auth。此外,由于金字塔不是关于sqlalchemy和其他数据库,它不强制执行任何操作。换句话说,使用ZODB实现它,SQLAlchemy应该很容易。
我相信流程实际上非常简单,我实际上并不是(我猜)正确地为当前客户端流程实现oauth2。缺少某些属性,如grant_type等。它们可以作为额外的参数传递,但是根据oauth2服务器,它可能无法在任何地方正常工作。
顺便说一句,我正在寻找将提供程序添加到ini文件中,以便可以从那里而不是代码中加载它们。这样你就可以为dev,prod等维护不同的应用程序。