Skip to main content

Authentication

Steward provides a complete authentication system for apps built on the platform. Users authenticate once and get a wallet, session, and identity that works across multiple Steward-powered apps.

Auth Methods

Passkeys (WebAuthn)

Phishing-resistant, passwordless login using biometrics or hardware keys.

Email Magic Link

One-click sign-in via a link sent to the user’s email.

OAuth Providers

Google, Discord, and Twitter/X via PKCE popup flow.

SIWE

Sign-In With Ethereum for users who already have a wallet.

How It Works

The auth flow follows a standard pattern regardless of the sign-in method:
  1. The user initiates sign-in (passkey, email, OAuth, or SIWE)
  2. Steward verifies the credential and creates or retrieves the user
  3. Steward returns a JWT access token (15 min) and a refresh token (30 days)
  4. Your app uses the access token for API calls via StewardClient

Session Management

Steward uses a two-token session model: The SDK handles token refresh automatically. When the access token is within 2 minutes of expiry, auth.getToken() triggers a background refresh.

Provider Discovery

Your app can query the server to discover which auth methods are enabled:
The <StewardLogin> React component does this automatically and only shows buttons for enabled methods.

Cross-Tenant Identity

Steward supports multi-tenant authentication. A single user identity (email, wallet) can belong to multiple apps (tenants). Each tenant is an isolated environment with its own agents, policies, and configuration. See Cross-Tenant Identity for details on tenant management, join modes, and switching between apps.

SDK vs React

API Keys, Agent Tokens, and Platform Keys

Steward uses separate credentials for different audiences: Production deployments should set a JWT secret separate from STEWARD_MASTER_PASSWORD. The current code is being unified around JWT env naming; check the deployment guide before configuring production secrets.