PromptAuth.dev

Documentation

Le prompt fait tout ce qui suit à ta place. Cette page sert à comprendre ce qu'il écrit, ou à intégrer PromptAuth à la main.

Le principe

PromptAuth est un fournisseur OpenID Connect. Ton app envoie l'utilisateur vers PromptAuth, qui le fait passer par Google, puis le renvoie sur ton adresse de retour avec un code. Ton app échange ce code contre un jeton signé qui contient l'e-mail, le nom et la photo de l'utilisateur.

Points d'accès

Découverte   https://promptauth.dev/.well-known/openid-configuration
Autorisation https://promptauth.dev/api/v1/authorize
Jetons       https://promptauth.dev/api/v1/token
Clés (JWKS)  https://promptauth.dev/.well-known/jwks.json

1. Envoyer l'utilisateur vers PromptAuth

Génère un code_verifier aléatoire, son code_challenge (SHA-256 en base64url), un state et un nonce.

GET https://promptauth.dev/api/v1/authorize
  ?response_type=code
  &client_id=pa_pub_…
  &redirect_uri=https://monapp.com/auth/callback
  &state=…&nonce=…
  &code_challenge=…&code_challenge_method=S256

L'adresse de retour doit correspondre exactement à l'une de celles enregistrées dans ton projet.

2. Échanger le code

Le code expire après 60 secondes et ne sert qu'une fois.

POST https://promptauth.dev/api/v1/token
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code&code=…&client_id=pa_pub_…
&redirect_uri=https://monapp.com/auth/callback&code_verifier=…
{
  "id_token": "eyJhbGciOiJFUzI1NiIs…",
  "token_type": "Bearer",
  "expires_in": 3600,
  "user": { "id": "…", "email": "ada@example.com", "email_verified": true,
            "name": "Ada", "picture": "https://…" }
}

Sans PKCE, un serveur peut s'authentifier avec sa clé secrète : Authorization: Bearer pa_sk_….

3. Vérifier le jeton

import { createRemoteJWKSet, jwtVerify } from "jose";

const jwks = createRemoteJWKSet(new URL("https://promptauth.dev/.well-known/jwks.json"));
const { payload } = await jwtVerify(idToken, jwks, {
  issuer: "https://promptauth.dev",
  audience: process.env.PROMPTAUTH_CLIENT_ID,
  algorithms: ["ES256"],
});
// payload.sub = identifiant stable de l'utilisateur pour TON projet

Erreurs renvoyées à ton app

Si l'utilisateur annule ou si ta limite d'utilisateurs est atteinte, PromptAuth renvoie vers ton adresse de retour avec error=access_denied et un error_description lisible à afficher, dans la langue du navigateur de l'utilisateur.

Prêt ? Crée ton projet pour obtenir ton prompt.