Integrate WorkOS AuthKit with Python applications. Adapts to Django, Flask, FastAPI, or vanilla Python. Server-side authentication with redirect-based OAuth flow.
Install
npx skillscat add workos/cli/workos-python Install via the SkillsCat registry.
WorkOS AuthKit for Python
Step 1: Fetch SDK Documentation (BLOCKING)
STOP. Do not proceed until complete.
WebFetch: https://raw.githubusercontent.com/workos/workos-python/main/README.md
Also fetch the AuthKit quickstart for reference:
WebFetch: https://workos.com/docs/authkit/vanilla/python
The README is the source of truth for SDK API usage. If this skill conflicts with README, follow README.
Step 2: Detect Framework
Examine the project to determine which Python web framework is in use:
manage.py exists? → Django
settings.py has django imports? → Confirmed Django
Gemfile/requirements has 'fastapi'? → FastAPI
main.py has FastAPI() instance? → Confirmed FastAPI
requirements has 'flask'? → Flask
server.py/app.py has Flask() instance? → Confirmed Flask
None of the above? → Vanilla Python (use Flask quickstart pattern)Adapt all subsequent steps to the detected framework. Do not force one framework onto another.
Step 3: Pre-Flight Validation
Package Manager Detection
uv.lock exists? → uv add
pyproject.toml has [tool.poetry]? → poetry add
Pipfile exists? → pipenv install
requirements.txt exists? → pip install (+ append to requirements.txt)
else → pip installEnvironment Variables
Check .env for:
WORKOS_API_KEY- starts withsk_WORKOS_CLIENT_ID- starts withclient_
Step 4: Install SDK
Install using the detected package manager:
# uv
uv add workos python-dotenv
# poetry
poetry add workos python-dotenv
# pip
pip install workos python-dotenvIf using requirements.txt, also append workos and python-dotenv to it.
Verify: python -c "import workos; print('OK')"
Step 5: Integrate Authentication
If Django
- Configure settings.py — add
import os+from dotenv import load_dotenv+load_dotenv()at top. AddWORKOS_API_KEYandWORKOS_CLIENT_IDfromos.environ.get(). - Create auth views — create
auth_views.py(or add to existing views):login_view: call SDK'sget_authorization_url()withprovider='authkit', redirectcallback_view: callauthenticate_with_code()with the code param, store user inrequest.sessionlogout_view: flush session, redirect
- Add URL patterns — add
auth/login/,auth/callback/,auth/logout/tourls.py - Update templates — add login/logout links using
{% url %}tags
If Flask
Follow the quickstart pattern exactly:
- Initialize WorkOS client in
server.py/app.py:from workos import WorkOSClient workos = WorkOSClient(api_key=os.getenv("WORKOS_API_KEY"), client_id=os.getenv("WORKOS_CLIENT_ID")) - Create
/loginroute — callworkos.user_management.get_authorization_url(provider="authkit", redirect_uri="..."), redirect - Create
/callbackroute — callworkos.user_management.authenticate_with_code(code=code), set session cookie - Create
/logoutroute — clear session, redirect - Update home route — show user info if session exists
If FastAPI
- Initialize WorkOS client in main app file
- Create
/loginendpoint — generate auth URL, returnRedirectResponse - Create
/callbackendpoint — exchange code, store in session/cookie - Create
/logoutendpoint — clear session - Use
Depends()for auth middleware on protected routes
If Vanilla Python (no framework detected)
Install Flask and follow the Flask pattern above. This matches the official quickstart.
Step 6: Environment Setup
Create/update .env with WorkOS credentials. Do NOT overwrite existing values.
WORKOS_API_KEY=sk_...
WORKOS_CLIENT_ID=client_...Step 7: Verification Checklist
# 1. SDK importable
python -c "import workos; print('OK')"
# 2. Credentials configured
python -c "
from dotenv import load_dotenv; import os; load_dotenv()
assert os.environ.get('WORKOS_API_KEY','').startswith('sk_'), 'Missing WORKOS_API_KEY'
assert os.environ.get('WORKOS_CLIENT_ID','').startswith('client_'), 'Missing WORKOS_CLIENT_ID'
print('Credentials OK')
"
# 3. Framework-specific check
# Django: python manage.py check
# Flask: python -m py_compile server.py
# FastAPI: python -m py_compile main.pyError Recovery
"ModuleNotFoundError: No module named 'workos'"
Re-run the install command for the detected package manager.
Django: "CSRF verification failed"
Auth callback receives GET requests from WorkOS. Ensure callback view uses GET, not POST. Or add @csrf_exempt.
Flask: Session not persisting
Ensure app.secret_key is set (required for Flask sessions).
Virtual environment not active
Check for .venv/, venv/, or poetry-managed environments. Activate before running install.