为aiohttp提供不可知的oauth2客户端
aiohttp-oauth2的Python项目详细描述
aiohttp-oauth2
aiohttp的一个与提供程序无关的oauth2客户机库,作为一个自组成的嵌套应用程序实现。
没有对应用程序强制实施身份验证机制的意见,可以而且应该提供on_login
和on_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模板的一个很好的快捷方式,请参见^{
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