people
Shared passwords in a vault, no second factor, one login reused across everything.
Keycloak login with a strong password policy and WebAuthn passkeys — passwordless if you want it.
Sign in to the dashboard at app.a2acloud.io, or authenticate from the CLI with `a2a login`. One identity — backed by a dedicated Keycloak realm — works across the dashboard, the API, MCP servers, and agent-to-agent calls, with passkeys, scoped tokens, and signed grants instead of shared passwords.
one identity · people, CLIs, agents, and tools
Agent platforms accumulate logins: a dashboard password for humans, a personal access token in the CLI, a static API key for programmatic calls, another key for the MCP server, and shared credentials whenever one agent calls another. Each is a separate secret to leak, rotate, and audit. a2a cloud puts every one of those surfaces behind a single identity system with short-lived, scoped tokens.
Dashboard, CLI, API, MCP, and agent-to-agent calls all resolve to one Keycloak-backed identity, narrowed by scopes and grants at every hop.
Sign in at app.a2acloud.io. Identity is backed by a dedicated Keycloak realm — email and password with a strong policy (12+ chars, mixed case, digit, symbol) and verified email.
WebAuthn is enabled, including passwordless mode. Sign in with a passkey, security key, or platform biometric instead of a password.
`a2a login` opens a browser OAuth flow (Authorization Code + PKCE), captures the token on a local callback, and caches it in ~/.a2a/credentials.json. `a2a whoami` and `a2a logout` round it out.
No browser? `a2a login --token <jwt>` uses a pre-issued Keycloak token directly — the path for CI, containers, and headless machines.
The API and MCP endpoints accept a Keycloak RS256 JWT as a bearer token — signature verified via JWKS, with issuer, expiry, and subject checks. Access tokens are short-lived; the CLI refreshes them automatically.
Tokens carry least-privilege scopes: openid, email, offline_access, plus agent:read and mcp:invoke. The surface an agent can touch is bounded by the scope it was granted.
Every hosted MCP server validates a Keycloak JWT and enforces scopes per method: tools/list needs agent:read, tools/call needs mcp:invoke. Optional resource-audience binding blocks token replay.
Each agent declares how callers authenticate: NoAuth (public), APIKeyAuth, JWTAuth, PlatformUserAuth, or a remote bearer / OIDC-userinfo resolver that bridges an external IdP or SAML-backed service.
When an agent calls another, the platform mints an Ed25519-signed grant — audience, TTL, file and tool scope — verified without a registry round-trip. No shared credentials cross the boundary.
Shared passwords in a vault, no second factor, one login reused across everything.
Keycloak login with a strong password policy and WebAuthn passkeys — passwordless if you want it.
A long-lived personal access token pasted into a dotfile and forgotten.
`a2a login` OAuth with PKCE and auto-refresh; `--token` for headless CI.
A static API key that never expires and grants everything.
Short-lived Keycloak JWT scoped to exactly what the caller needs.
One key that unlocks every tool, checked once at connect time.
Per-method scope enforcement — agent:read to list, mcp:invoke to call.
Agents share the caller's credentials and inherit its full authority.
Ed25519-signed grants: audience-bound, time-limited, scope-constrained.
A homegrown SSO bridge bolted on per integration.
Bridge an external IdP or SAML-backed service through a remote-bearer / OIDC resolver.
Sign in to the dashboard at https://app.a2acloud.io. Authentication is handled by a dedicated Keycloak realm (auth.a2acloud.io), so the same identity works across the dashboard, the API, the CLI, and MCP endpoints.
Run `a2a login`. It opens your browser to complete an OAuth Authorization Code flow with PKCE, receives the token on a local callback, and caches it in ~/.a2a/credentials.json. Use `a2a whoami` to check who you're signed in as and `a2a logout` to clear the session. For headless environments, `a2a login --token <jwt>` skips the browser.
Yes. WebAuthn is enabled, including passwordless mode, so you can sign in with a passkey, hardware security key, or platform biometric instead of a password.
Not today — a2a cloud login uses email and password or WebAuthn passkeys. For organization-wide single sign-on, see the Enterprise plan, and note that individual agents can accept identity from an external IdP or SAML-backed service through a remote-bearer / OIDC resolver.
Each agent declares an auth model: NoAuth for public agents, APIKeyAuth for a static bearer secret, JWTAuth or PlatformUserAuth for signed-in user identity, or a remote-bearer / OIDC-userinfo resolver that validates tokens from an external identity provider.
The hosted MCP server accepts a Keycloak JWT as a bearer token and enforces scopes per method — agent:read to list tools, mcp:invoke to call them. Paste the endpoint and token into your MCP client. See the guide on connecting an agent to Claude and Cursor.
The platform mints an Ed25519-signed grant for each agent-to-agent call, binding the audience, a short TTL, and file and tool scope. The receiving agent verifies the signature locally — no shared API keys ever cross the boundary.
All guides live in the guides index.
Sign in at app.a2acloud.io, authenticate the CLI with `a2a login`, and call API, MCP, and agent surfaces with scoped grants. Agent API receipts bind `user:{id}`; public `/invoke` and standard MCP receipts use conservative gateway caller classifications.