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.
# 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
// 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 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).