https://github.com/authlib/aiohttp-oauth-client
Use HTTPX instead: https://docs.authlib.org/en/latest/client/httpx.html
https://github.com/authlib/aiohttp-oauth-client
Last synced: 7 months ago
JSON representation
Use HTTPX instead: https://docs.authlib.org/en/latest/client/httpx.html
- Host: GitHub
- URL: https://github.com/authlib/aiohttp-oauth-client
- Owner: authlib
- License: bsd-3-clause
- Created: 2019-09-12T05:54:37.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2024-06-10T16:01:29.000Z (over 1 year ago)
- Last Synced: 2025-06-01T05:23:46.457Z (8 months ago)
- Language: Python
- Homepage:
- Size: 15.6 KB
- Stars: 19
- Watchers: 1
- Forks: 3
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# aiohttp OAuth Clients
## OAuth 1.0 Client
Taking Twitter as an example on how to use `OAuth1Client`.
```python
from aiohttp_oauth_client import OAuth1Client
```
### 1. Fetch Temporary Credential
For OAuth 1.0, the first step is requesting a temporary credential (aka
request token).
```python
client_id = '__YOUR_TWITTER_CLIENT_ID__'
client_secret = '__YOUR_TWITTER_CLIENT_SECRET__'
async def fetch_request_token():
url = 'https://api.twitter.com/oauth/request_token'
async with OAuth1Client(client_id, client_secret) as session:
request_token = await session.fetch_request_token(url)
return request_token
```
This `fetch_request_token` method will return the temporary credential like:
```
{'oauth_token': 'Ih....Jw', 'oauth_token_secret': 'gr...GE', 'oauth_callback_confirmed': 'true'}
```
We can test this function with:
```py
# twitter.py
import asyncio
from aiohttp_oauth_client import OAuth1Client
client_id = '__YOUR_TWITTER_CLIENT_ID__'
client_secret = '__YOUR_TWITTER_CLIENT_SECRET__'
async def fetch_request_token():
url = 'https://api.twitter.com/oauth/request_token'
async with OAuth1Client(client_id, client_secret) as session:
request_token = await session.fetch_request_token(url)
return request_token
async def main():
request_token = await fetch_request_token()
print(request_token)
if __name__ == '__main__':
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
```
### 2. Redirect to Authorization Endpoint
The second step is to generate the authorization URL:
```py
def create_authorization_url(request_token):
authenticate_url = 'https://api.twitter.com/oauth/authenticate'
client = OAuth1Client(client_id, client_secret)
url = client.create_authorization_url(authenticate_url, request_token['oauth_token'])
return url
```
This step is synchronized, no need for `async` and `await`. Passing the
`request_token` we got from the first step, we would get a url like:
```
https://api.twitter.com/oauth/authenticate?oauth_token=Ih....Jw
```
Then visit this URL with your browser, and approve the request. Twitter
will redirect back to your default `redirect_uri` you registered in Twitter.
If you want to redirect to your specified URL, rewrite the code like:
```py
def create_authorization_url(request_token):
authenticate_url = 'https://api.twitter.com/oauth/authenticate'
client = OAuth1Client(client_id, client_secret, redirect_uri='https://your-defined-url')
url = client.create_authorization_url(authenticate_url, request_token['oauth_token'])
return url
```
### 3. Fetch Access Token
The last step is to fetch the access token. In previous step, twitter
will redirect back to a URL, for instance, something like:
```
https://your-domain.org/auth?oauth_token=Ih...Jw&oauth_verifier=fcg..1Dq
```
We will use the `oauth_verifier` in this URL to fetch access token. Here
is our code:
```py
async def fetch_access_token(request_token, oauth_verifier):
url = 'https://api.twitter.com/oauth/access_token'
async with OAuth1Client(client_id, client_secret) as session:
session.token = request_token
token = await session.fetch_access_token(url, oauth_verifier)
return token
# if you specified redirect_uri in previous step, create the session with
# OAuth1Client(client_id, client_secret, redirect_uri='....')
```
We can test this function with:
```py
# twitter.py
import asyncio
from aiohttp_oauth_client import OAuth1Client
client_id = '__YOUR_TWITTER_CLIENT_ID__'
client_secret = '__YOUR_TWITTER_CLIENT_SECRET__'
async def fetch_access_token(request_token, oauth_verifier):
url = 'https://api.twitter.com/oauth/access_token'
async with OAuth1Client(client_id, client_secret) as session:
session.token = request_token
token = await session.fetch_access_token(url, oauth_verifier)
return token
async def main():
# from step 1
request_token = {
'oauth_token': 'Ih....Jw',
'oauth_token_secret': 'gr...GE',
'oauth_callback_confirmed': 'true'
}
# from step 2
verifier = 'fcg..1Dq'
token = await fetch_access_token(request_token, verifier)
print(request_token)
if __name__ == '__main__':
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
```
## OAuth 2.0 Client
```python
from aiohttp_oauth_client import OAuth2Client
```
## OAuth 2.0 Assertion
```python
from aiohttp_oauth_client import AssertionClient
```