Provider agnostic OAuth2 client for aiohttp
Project description
aiohttp-oauth2
A provider agnostic oauth2 client library for aiohttp, implemented as a self-composed nested application.
No opinions about auth mechanisms are enforced on the application, an on_login
and on_error
coroutine can be provided to implement your own login mechanisms (token, session, etc).
Usage
$ pip install -U aiohttp_oauth2
Simple
from aiohttp import web
from aiohttp_oauth2 import oauth2_app
async def app_factory():
app = web.Application()
app.add_subapp(
"/github/", # any arbitrary prefix
oauth2_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 them
scopes=["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 response
on_login=set_session_and_redirect,
on_error=show_error_page,
),
)
return app
The necessary oauth2 routes are added as /auth
and /callback
, only the former a developer needs to worry about.
Now logging in a user is as simple as redirecting them to: /github/auth
.
Complex
Since the oauth2_app
function is simply a factory that generates sub-apps, you can use this to add any number of oauth2 providers to log in against:
async def app_factory():
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",
)
)
...
return app
As a nice shortcut, use the aiohttp_oauth2/client/contrib.py
helpers to avoid needing to set the urls explicity.
Examples
Check the "examples" directory for working 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
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for aiohttp_oauth2-0.0.3-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 97fae02ec7a513697ed0c84a94ca5eecfce27078957e4f8f2ff79f7d605e7734 |
|
MD5 | 54a8a4e95d65eba578b1e1fcc3df6f53 |
|
BLAKE2b-256 | 88124b206772a1c4a117c16321fcd494a5f8a7af57d7ac4a133bf0a872a16c91 |