Skip to main content

The big picture

Ave combines several things that usually live in separate systems:

Passwordless identity

Users authenticate with a passkey — no passwords, no SMS codes.

OAuth 2.0 + OIDC

Standard authorization code flow with PKCE, ID tokens, access tokens, and refresh tokens.

Connector delegation

One app can request scoped access to another app’s resources on a user’s behalf.

Signing

Apps can request cryptographic approval from a user — the user signs a payload with their Ed25519 key.

E2EE key delivery

Per-app, per-identity encryption keys are delivered via URL fragment (#app_key=...) on the OAuth callback redirect — never in /api/oauth/token responses. The server never holds plaintext.

The standard OAuth flow

1

Your app redirects the user to Ave

You construct a URL to https://aveid.net/signin with your client_id, redirect_uri, scopes, PKCE challenge, state, and nonce. The user is sent there.
2

The user authenticates

The user completes passkey login and selects an identity in the Ave UI. Ave issues a short-lived, one-time authorization code.
3

Ave redirects back with a code

Ave redirects to your redirect_uri with ?code=...&state=.... Your app validates state before doing anything else.
4

Your app exchanges the code for tokens

Your app (or server) sends the code to POST https://api.aveid.net/api/oauth/token. You get back access tokens, an ID token, and optionally a refresh token.
5

Your app uses the tokens

Use id_token to establish a user session. Use access_token or access_token_jwt to call Ave APIs. Use refresh_token to get new tokens without re-authenticating.

Optional extension flows

The Connector flow lets one app (“source”) request delegated access to a resource owned by another app (“target”). The user approves once at https://aveid.net/connect. Afterward, the source app uses a token-exchange grant to get a delegated token scoped to that resource.Use this when: your app needs to act on a user’s behalf in another service that also uses Ave.Full guide
Your server creates a signing request with a human-readable payload. The user sees the payload in the Ave UI and approves with their passkey. Ave returns an Ed25519 signature that you verify server-side before taking any irreversible action.Use this when: you need high-integrity proof that a specific person approved a specific action (e.g. financial transactions, permissions changes).Full guide
For apps that store encrypted user data, Ave can deliver a per-app, per-identity encryption key. During the authorization consent step, the Ave UI decrypts the server-stored key using the user’s master key and passes the plaintext key as #app_key=... in the callback redirect fragment. Your server never sees plaintext key material.Use this when: you want users to own their data and you want to guarantee you can’t read it.Full guide

Trust model

LayerWho operates itWhat it’s responsible for
Ave auth UI + identity systemAvePasskey auth, identity selection, user consent
Ave APIAveToken issuance, validation, signing, metadata
Your backendYouSession management, business logic, app-level authorization
Ave tokens and signatures are identity signals — they tell you who the user is and what they approved. Enforcing what that identity is allowed to do in your app is still your responsibility.
Last modified on March 4, 2026