Démarrage rapide
Un premier parcours OIDC complet, de la redirection à la lecture des claims.
Ce parcours suppose que vous avez reçu un client_id et un client_secret sandbox, et que votre redirect_uri est enregistrée.
1. Lire le discovery
curl -s https://oidc-sandbox.a3bc.io/.well-known/openid-configuration
La réponse contient authorization_endpoint, token_endpoint, jwks_uri et userinfo_endpoint.
2. Rediriger l’utilisateur
Générez un state et un nonce aléatoires, conservez-les côté serveur (session), puis redirigez vers l’endpoint d’autorisation.
https://oidc-sandbox.a3bc.io/oauth2/auth
?response_type=code
&client_id=<client_id>
&redirect_uri=https%3A%2F%2Fapp.example.com%2Fcallback
&scope=openid%20profile%20email
&state=<state>
&nonce=<nonce>
import secrets, urllib.parse
state, nonce = secrets.token_urlsafe(24), secrets.token_urlsafe(24)
params = {
"response_type": "code",
"client_id": CLIENT_ID,
"redirect_uri": REDIRECT_URI,
"scope": "openid profile email",
"state": state,
"nonce": nonce,
}
url = "https://oidc-sandbox.a3bc.io/oauth2/auth?" + urllib.parse.urlencode(params)
import { randomBytes } from "node:crypto";
const state = randomBytes(24).toString("base64url");
const nonce = randomBytes(24).toString("base64url");
const url = new URL("https://oidc-sandbox.a3bc.io/oauth2/auth");
url.search = new URLSearchParams({
response_type: "code",
client_id: CLIENT_ID,
redirect_uri: REDIRECT_URI,
scope: "openid profile email",
state,
nonce,
}).toString();
3. Recevoir le retour
L’utilisateur s’authentifie et consent dans l’app TrustMe, puis revient sur votre redirect_uri?code=…&state=…. Comparez state à la valeur conservée avant toute autre action.
4. Échanger le code
curl -s -u "$CLIENT_ID:$CLIENT_SECRET" \
-d grant_type=authorization_code \
-d code="$CODE" \
--data-urlencode redirect_uri="$REDIRECT_URI" \
https://oidc-sandbox.a3bc.io/oauth2/token
import requests
r = requests.post(
"https://oidc-sandbox.a3bc.io/oauth2/token",
auth=(CLIENT_ID, CLIENT_SECRET), # client_secret_basic
data={"grant_type": "authorization_code", "code": code, "redirect_uri": REDIRECT_URI},
timeout=15,
)
r.raise_for_status()
tokens = r.json() # access_token, id_token, ...
const basic = Buffer.from(`${CLIENT_ID}:${CLIENT_SECRET}`).toString("base64");
const res = await fetch("https://oidc-sandbox.a3bc.io/oauth2/token", {
method: "POST",
headers: { Authorization: `Basic ${basic}`, "Content-Type": "application/x-www-form-urlencoded" },
body: new URLSearchParams({ grant_type: "authorization_code", code, redirect_uri: REDIRECT_URI }),
});
if (!res.ok) throw new Error(await res.text());
const tokens = await res.json();
5. Vérifier l’id_token et lire les claims
Vérifiez la signature (clés du jwks_uri), l’émetteur, l’audience, l’expiration et le nonce, comme décrit dans Vérifier les jetons. Les claims demandés mais non disponibles sont simplement absents : vérifiez que vous avez tout ce dont vous avez besoin.