Voznest Forge

Workspace

WorkspaceProjects

Development

DocsAPI ReferenceSDKsEmbed StudioChangelog
  1. Forge
  2. /Docs

Start here

Getting StartedQuickstartPlatform ConceptsEnvironments

Build

ProjectsIdentityAgentsGatewayCapabilitiesPermissions ReferenceInstallationsLive activity

Commands & interactions

CommandsContext-menu CommandsInteractionsComponentsModals (Forms)Activities (Embedded Apps)

Acting in hubs

MessagesEmbedsEmbeds v2 (Blocks)Embeds v3Incoming WebhooksHub Management APIEvent StreamDelivery

Sign in with Voznest

AccessOpenID Connect

API

APIAuthenticationErrorsRate LimitsSecurity

Publish & operate

App Market & ListingTemplates & SandboxObservability & Team Tools

Tools

SDKsExamplesFAQ & TroubleshootingReference

Sign in with Voznest

OpenID Connect

Use Voznest as a login provider in Auth.js, Auth0, Supabase, Keycloak…

Voznest is a standard OpenID Connect provider: point any OIDC library at the issuer and it configures itself from the discovery document. Ask for the openid scope (plus identify/profile/email for the claims you need) and the token response includes an id_token — an ES256 JWT signed with a key from the JWKS.

ts
# Any OpenID Connect library (Auth0, Supabase, Keycloak, Clerk, Cloudflare Access, openid-client…)Issuer / discovery   https://voznest.com/.well-known/openid-configurationJWKS                 https://voznest.com/.well-known/jwks.json       (ES256, keys rotate by kid)UserInfo             GET https://api.voznest.com/api/v1/oauth/userinfo                (Bearer access token)ID token claims      iss, sub, aud, azp, iat, exp, nonce,                     preferred_username, name, picture, profile, updated_at   (identify / profile)                     email, email_verified                                      (email)

Auth.js / NextAuth

ts
// Auth.js / NextAuth: Voznest is a standard OpenID Connect providerimport NextAuth from "next-auth";export const { handlers, auth } = NextAuth({  providers: [{    id: "voznest",    name: "Voznest",    type: "oidc",    issuer: "https://voznest.com",                 // discovery: /.well-known/openid-configuration    clientId: process.env.VOZNEST_CLIENT_ID,     // "<project id>" or "<project id>.development"    clientSecret: process.env.VOZNEST_CLIENT_SECRET,    authorization: { params: { scope: "openid identify email" } },    checks: ["pkce", "state", "nonce"],  }],});

ID token

Validate it as usual: signature (JWKS, by kid), iss = https://voznest.com, aud = your client_id, exp, and the nonce you sent to authorize. sub is the Voznest user id — stable for the life of the account.

The button

Use the official button so people recognise it. Keep the Voznest mark, the text "Continue with Voznest" (or "Sign in with Voznest") and enough contrast; don't recolour or stretch the mark.

Continue with VoznestContinue with Voznest
ts
<!-- "Continue with Voznest": link it to your /login route that starts the flow --><a href="/auth/voznest" style="display:inline-flex;align-items:center;gap:10px;height:44px;padding:0 18px;   border-radius:12px;background:#0d0926;color:#fff;font:600 15px/1 system-ui,sans-serif;text-decoration:none;   border:1px solid rgba(124,92,255,.55);box-shadow:0 6px 18px -6px rgba(124,92,255,.6)">  <img src="https://voznest.com/brand/q-48.png" alt="" width="24" height="24">  Continue with Voznest</a><!-- Light backgrounds: background:#fff; color:#151036; border:1px solid #d9d3f5 -->

Supported: response type code, PKCE S256, nonce, prompt (none, consent, login), client authentication client_secret_basic, client_secret_post or none (public clients with PKCE).

PreviousAccessNext API