Starlette Integration¶
Starlette is a lightweight ASGI framework/toolkit, which is ideal for building high performance asyncio services.
This documentation covers OAuth 1.0 Client support for Starlette. Because all the frameworks integrations share the same API, it is best to:
Read Web Clients at first.
The difference between Starlette and Flask/Django integrations is Starlette
is async. We will use await for the functions we need to call. But
first, let’s create an OAuth instance:
from authlib.integrations.starlette_client import OAuth
oauth = OAuth()
Unlike Flask and Django, Starlette OAuth registry uses HTTPX
AsyncOAuth1Client as the OAuth 1.0
backend.
Enable Session for OAuth 1.0¶
With OAuth 1.0, we need to use a temporary credential to exchange for an access token. This temporary credential is created before redirecting to the provider (Twitter), and needs to be saved somewhere in order to use it later.
With OAuth 1, the Starlette client will save the request token in sessions. To
enable this, we need to add the SessionMiddleware middleware to the
application, which requires the installation of the itsdangerous package:
from starlette.applications import Starlette
from starlette.middleware.sessions import SessionMiddleware
app = Starlette()
app.add_middleware(SessionMiddleware, secret_key="some-random-string")
However, using the SessionMiddleware will store the temporary credential as
a secure cookie which will expose your request token to the client.
Examples¶
We have Starlette demos at https://github.com/authlib/demo-oauth-client
OAuth 1.0: Starlette Twitter login