为aiohttp提供不可知的oauth2客户端

aiohttp-oauth2的Python项目详细描述


aiohttp-oauth2

CircleCI

aiohttp的一个与提供程序无关的oauth2客户机库,作为一个自组成的嵌套应用程序实现。

没有对应用程序强制实施身份验证机制的意见,可以而且应该提供on_loginon_error协同路由来实现您自己的登录机制(令牌、会话等)。

用法

$ pip install -U aiohttp_oauth2

简单

fromaiohttpimportwebfromaiohttp_oauth2importoauth2_appasyncdefapp_factory():app=web.Application()app.add_subapp("/github/",# any arbitrary prefixoauth2_app(client_id=123,client_secret=456,authorize_url="https://github.com/login/oauth/authorize",token_url="https://github.com/login/oauth/access_token",# add scopes if you want to customize themscopes=["foo","bar","baz"],# optionally add an on_login coroutine to handle the post-login logic# it should expect the request and the oauth2 access code responseon_login=set_session_and_redirect,on_error=show_error_page,),)returnapp

必需的oauth2路由被添加为/auth/callback。现在登录用户只需将其重定向到:/github/auth

复杂

由于oauth2_app函数只是生成子应用程序的工厂,因此您可以使用它添加任意数量的oauth2提供程序来登录:

fromaiohttpimportwebfromaiohttp_oauth2importoauth2_appasyncdefapp_factory()->web.Application:app=web.Application()app.add_subapp("/github/",oauth2_app(...,authorize_url="https://github.com/login/oauth/authorize",token_url="https://github.com/login/oauth/access_token",))app.add_subapp("/google/",oauth2_app(...,authorize_url="https://accounts.google.com/o/oauth2/v2/auth",token_url="https://www.googleapis.com/oauth2/v4/token",))app.add_subapp("/twitter/",oauth2_app(...,authorize_url="https://api.twitter.com/oauth/authorize",token_url="https://api.twitter.com/oauth2/token",))...returnapp

现在可以将用户重定向到/twitter/auth/google/auth/github/auth

作为authorize/tokenurl模板的一个很好的快捷方式,请参见^{}帮助程序,以避免需要显式地设置url。

importosfromaiohttpimportwebfromaiohttp_oauth2.client.contribimportgithubasyncdefapp_factory()->web.Application:app=web.Application()app.add_subapp("/login/github",github(os.getenv("CLIENT_ID"),os.getenv("CLIENT_SECRET"),),)# and/or `google`, `slack`, `twitter` instead of `github`returnapp

示例

检查“examples”目录中的工作示例:

$ cd examples
$ pip install -r requirements.txt

# this just makes the library available for import, don't typically do it :D
$ PYTHONPATH=".." python github.py

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java根据日期比较两条记录并返回cassandra中的最新记录   在Java中检查导致错误的奇数整数   当其他应用程序也在访问同一数据库时,java有没有办法打开h2控制台?   Java不能生成多个JSON文本   使用撤消按钮在Java ArrayList中移动   通过java Processbuilder提交hadoop mapreduce作业不会结束   使用loop在java中生成基本乘法表   java如何反序列化XML并在给定元素后获取特定键的值   优选具有java实现的加密算法   java连续线程。sleep()在一个同步的瞬间继续运行理想的延迟代码   java如何在OpenGL ES 2.0中从数组中读取4个以上的顶点数据?   java AlertDialog getActivity()错误   java根据数据库表动态连接到数据库   java获取字符串中特定单词后面的字符?   在Cactoos类上使用多个Iterables引发的java警告   在eclipse中找不到java 安卓 inapp购买库   安全性java网络摄像头捕获API安全吗?   当使用服务帐户列出GSuite上的驱动器文件时,java被授权   java如何提高从hazelcast读取数据的Get方法性能?