Phase 1 — Agent & Command Foundation: - Rewrite cs-project-manager agent (55→515 lines, 4 workflows, 6 skill integrations) - Expand cs-product-manager agent (408→684 lines, orchestrates all 8 product skills) - Add 7 slash commands: /rice, /okr, /persona, /user-story, /sprint-health, /project-health, /retro Phase 2 — Script Gap Closure (2,779 lines): - jira-expert: jql_query_builder.py (22 patterns), workflow_validator.py - confluence-expert: space_structure_generator.py, content_audit_analyzer.py - atlassian-admin: permission_audit_tool.py - atlassian-templates: template_scaffolder.py (Confluence XHTML generation) Phase 3 — Reference & Asset Enrichment: - 9 product references (competitive-teardown, landing-page-generator, saas-scaffolder) - 6 PM references (confluence-expert, atlassian-admin, atlassian-templates) - 7 product assets (templates for PRD, RICE, sprint, stories, OKR, research, design system) - 1 PM asset (permission_scheme_template.json) Phase 4 — New Agents: - cs-agile-product-owner, cs-product-strategist, cs-ux-researcher Phase 5 — Integration & Polish: - Related Skills cross-references in 8 SKILL.md files - Updated product-team/CLAUDE.md (5→8 skills, 6→9 tools, 4 agents, 5 commands) - Updated project-management/CLAUDE.md (0→12 scripts, 3 commands) - Regenerated docs site (177 pages), updated homepage and getting-started Quality audit: 31 files reviewed, 29 PASS, 2 fixed (copy-frameworks.md, governance-framework.md) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
7.0 KiB
7.0 KiB
Authentication & Billing Implementation Guide
Overview
Authentication and billing are foundational SaaS capabilities that affect every user interaction. This guide covers implementation patterns, security best practices, and common pitfalls for both systems.
Authentication
OAuth2 / OpenID Connect (OIDC) Flows
Authorization Code Flow (Recommended for Web Apps)
- Redirect user to authorization server (
/authorize) - User authenticates and consents
- Authorization server redirects back with authorization code
- Backend exchanges code for tokens (
/token) - Store tokens server-side, issue session cookie
Use when: Server-rendered apps, traditional web applications
Authorization Code Flow + PKCE (Recommended for SPAs and Mobile)
- Generate code verifier and code challenge
- Redirect with code challenge
- User authenticates
- Exchange code + code verifier for tokens
- Store tokens securely (memory for SPAs, secure storage for mobile)
Use when: Single-page applications, mobile apps, any public client
Client Credentials Flow
- Service authenticates with client_id and client_secret
- Receives access token for service-to-service calls
Use when: Backend service-to-service communication, no user context
JWT Best Practices
Token Structure:
- Access token: Short-lived (15-60 minutes), contains user claims
- Refresh token: Longer-lived (7-30 days), stored securely, used to get new access tokens
- ID token: Contains user identity claims, used by frontend only
Security Guidelines:
- Sign tokens with RS256 (asymmetric) for distributed systems
- Include
iss,aud,exp,iat,substandard claims - Never store sensitive data in JWT payload (it is base64-encoded, not encrypted)
- Validate all claims on every request
- Implement token rotation for refresh tokens
- Maintain a deny-list for revoked tokens (or use short-lived access tokens)
- Set
httpOnly,secure,sameSite=strictfor cookie-stored tokens
Common Pitfalls:
- Using HS256 in distributed systems (shared secret)
- Storing JWTs in localStorage (XSS vulnerable)
- Not validating
audclaim (token reuse attacks) - Excessively long access token lifetimes
RBAC vs ABAC
Role-Based Access Control (RBAC)
- Assign users to roles (Admin, Editor, Viewer)
- Roles have fixed permission sets
- Simple to implement and understand
- Works well for most SaaS applications
Implementation:
User -> Role -> Permissions
john@acme.com -> Admin -> [create, read, update, delete, manage_users]
jane@acme.com -> Editor -> [create, read, update]
bob@acme.com -> Viewer -> [read]
Attribute-Based Access Control (ABAC)
- Decisions based on user attributes, resource attributes, environment
- More flexible but more complex
- Required for fine-grained access control
Use ABAC when:
- Access depends on resource ownership (users can edit their own posts)
- Multi-tenant isolation requires tenant-context checks
- Time-based or location-based access rules needed
- Regulatory compliance requires granular audit trails
Social Login Implementation
- Support Google, GitHub, Microsoft at minimum for B2B
- Map social identity to internal user record (by email)
- Handle account linking (same email, different providers)
- Always allow email/password as fallback
- Implement account deduplication strategy
Billing & Subscriptions
Stripe Integration Patterns
Setup Flow
- Create Stripe Customer on user registration
- Store
stripe_customer_idin your database - Use Stripe Checkout for initial payment (PCI-compliant)
- Store
subscription_idfor ongoing management - Sync plan status via webhooks (source of truth)
Key Stripe Objects
- Customer: Maps to your user/organization
- Product: Maps to your plan tier (Basic, Pro, Enterprise)
- Price: Specific pricing for a product (monthly, annual)
- Subscription: Active billing relationship
- Invoice: Generated per billing cycle
- PaymentIntent: Represents a payment attempt
Subscription Lifecycle
Trial Period
- Offer 7-14 day free trial (no credit card for PLG, card required for sales-led)
- Send reminder emails at 3 days and 1 day before trial ends
- Provide clear upgrade path within the product
- Track trial engagement to predict conversion
Active Subscription
- Sync plan features with entitlement system
- Handle plan upgrades (immediate proration) and downgrades (end of period)
- Support annual billing with discount (typically 15-20%)
- Send receipts and invoice notifications
Payment Failure / Dunning
- First failure: Retry automatically, notify user
- Second failure (3 days later): Retry, send warning email
- Third failure (7 days later): Retry, restrict features
- Final attempt (14 days): Cancel subscription, move to free tier
- Win-back: Send recovery emails at 30, 60, 90 days
Churned
- Downgrade to free tier (maintain data for re-activation)
- Track churn reason (survey on cancellation)
- Implement cancellation flow with save offers
- Define data retention policy (90 days typical)
Reactivated
- Allow easy re-subscription from settings
- Restore previous plan and data
- Consider win-back offers (discount for first month back)
Webhook Handling
Critical Webhooks to Handle:
customer.subscription.created- Activate plancustomer.subscription.updated- Sync plan changescustomer.subscription.deleted- Handle cancellationinvoice.paid- Confirm payment, update statusinvoice.payment_failed- Trigger dunning flowcheckout.session.completed- Complete signup flow
Webhook Best Practices:
- Verify webhook signature on every request
- Respond with 200 immediately, process asynchronously
- Implement idempotency (handle duplicate events)
- Log all webhook events for debugging
- Set up webhook failure alerts
- Use Stripe CLI for local development testing
PCI Compliance Basics
SAQ-A (Recommended for SaaS)
- Use Stripe.js / Stripe Elements for card collection
- Never touch raw card numbers on your servers
- Card data goes directly from browser to Stripe
- Your servers only handle tokens and customer IDs
Requirements
- Use HTTPS everywhere
- Never log card numbers or CVV
- Use Stripe-hosted payment forms or Elements
- Restrict access to Stripe dashboard (2FA required)
- Regularly rotate API keys
- Document your payment processing flow
Entitlement System Design
Feature Gating Pattern
Check flow:
1. User action requested
2. Look up user's subscription plan
3. Check plan's feature flags / limits
4. Allow or deny with appropriate message
Entitlement Types
- Boolean: Feature on/off (e.g., "SSO enabled")
- Numeric limit: Usage cap (e.g., "10 projects max")
- Tiered: Different capability levels (e.g., "basic/advanced analytics")
Implementation Tips
- Cache entitlements locally (refresh on plan change webhook)
- Show upgrade prompts at limit boundaries (not hard blocks)
- Provide grace periods for brief overages
- Track usage for plan recommendation engine