Louk.it agit comme fournisseur OAuth 2.0 (authorization code). Un compte Louk.it = connexion ou inscription sur vos apps (Spinly, Lyaly, etc.).
https://louk.it/.well-known/oauth-authorization-serverhttps://louk.it/oauth/authorizehttps://louk.it/oauth/token (POST)https://louk.it/oauth/userinfo (Bearer)/oauth/authorize avec client_id, redirect_uri, response_type=code, scope=openid profile email, state.code contre access_token (POST /oauth/token)./oauth/userinfo.$params = http_build_query([
'client_id' => LOUK_CLIENT_ID,
'redirect_uri' => 'https://votre-app.com/auth/louk/callback',
'response_type' => 'code',
'scope' => 'openid profile email',
'state' => bin2hex(random_bytes(16)),
]);
header('Location: https://louk.it/oauth/authorize?' . $params);
$ch = curl_init('https://louk.it/oauth/token');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query([
'grant_type' => 'authorization_code',
'code' => $_GET['code'],
'client_id' => LOUK_CLIENT_ID,
'client_secret' => LOUK_CLIENT_SECRET,
'redirect_uri' => 'https://votre-app.com/auth/louk/callback',
]),
CURLOPT_RETURNTRANSFER => true,
]);
$tokens = json_decode(curl_exec($ch), true);
import { LoukProvider } from "@/lib/providers/louk";
// providers: [LoukProvider(), Google(...), Discord(...)]
Clients et secrets : générés par php scripts/seed_platform.php → fichier data/oauth_clients.secrets.json (non versionné).