Authentication Patterns

📋 Planned

Documentation Under Construction

This page will provide 4 complete, copy-paste-ready authentication patterns for common scenarios: cookie-based, JWT, NextAuth.js, and OAuth/SSO.

Planned Content

  • Pattern 1: Cookie-based authentication (simplest)
  • Pattern 2: JWT from Authorization header (API-first)
  • Pattern 3: NextAuth.js session (React/Next.js apps)
  • Pattern 4: OAuth/SSO integration (Auth0, Okta, Azure AD)
  • When to use each pattern
  • Testing authentication flows
  • Security considerations for each pattern

Want to contribute or suggest improvements? Open an issue on GitHub

Authentication Patterns Overview

When complete, this will provide full implementations for:

Use when: Internal tools, MVPs, simple auth needs

class CookieUserResolver(UserResolver):
    async def resolve_user(self, request_context: RequestContext) -> User:
        user_id = request_context.get_cookie('user_id') or 'anonymous'
        role = request_context.get_cookie('role') or 'guest'
        # ... (full implementation)

Pattern 2: JWT from Header (Common)

Use when: API-first apps, mobile apps, microservices

class JWTUserResolver(UserResolver):
    async def resolve_user(self, request_context: RequestContext) -> User:
        auth_header = request_context.get_header('Authorization')
        # Extract and verify JWT
        # ... (full implementation)

Pattern 3: NextAuth.js (React/Next.js)

Use when: Integrating with existing Next.js app

class NextAuthUserResolver(UserResolver):
    async def resolve_user(self, request_context: RequestContext) -> User:
        session_token = request_context.get_cookie('next-auth.session-token')
        # Verify with NextAuth
        # ... (full implementation)

Pattern 4: OAuth/SSO (Enterprise)

Use when: Enterprise SSO, Auth0, Okta, Azure AD

class Auth0UserResolver(UserResolver):
    async def resolve_user(self, request_context: RequestContext) -> User:
        token = self.extract_bearer_token(request_context)
        # Verify with Auth0
        # ... (full implementation)