K Kinda-e

Se connecter avec Kinda-e

Ce guide montre comment ajouter la connexion Kinda-e à un site, avec un exemple PHP complet. Le principe est le même dans n'importe quel langage. Il vous faut un client_id, un client_secret et une adresse de retour enregistrée (voir Obtenir un accès).

1. Le bouton

Placez un bouton qui mène vers une page de votre site (par ex. /kindae/connexion.php). Vous pouvez reprendre ce style :

<a href="/kindae/connexion.php" style="display:inline-flex;align-items:center;gap:10px;padding:10px 18px;border-radius:999px;
   background:#4f46e5;color:#fff;font:600 15px system-ui,sans-serif;text-decoration:none">
  <span style="display:grid;place-items:center;width:24px;height:24px;border-radius:7px;background:#fff;color:#4f46e5;font-weight:800">K</span>
  Se connecter avec Kinda-e
</a>

Aperçu : KSe connecter avec Kinda-e

2. Envoyer la personne vers Kinda-e

Votre page crée un state aléatoire (protection contre les attaques CSRF), le garde en session, puis redirige vers :

https://kinda-e.com/oauth/authorize.php?response_type=code&client_id=VOTRE_CLIENT_ID&redirect_uri=https%3A%2F%2Fmonsite.com%2Fkindae%2Fretour.php&state=ALEATOIRE
ParamètreRôle
response_typeobligatoireToujours code.
client_idobligatoireL'identifiant de votre application.
redirect_uriobligatoireAdresse de retour, identique caractère pour caractère à une adresse enregistrée.
stateobligatoireValeur aléatoire que Kinda-e vous renvoie telle quelle.
promptfacultatifselect_account : toujours montrer l'écran « Choisir un compte ». none : aucun écran (voir plus bas).

Sur kinda-e.com, la personne se connecte (ou crée son compte). Si elle était déjà connectée, Kinda-e lui montre l'écran « Choisir un compte » : continuer avec ce compte ou en utiliser un autre. Une application externe affiche en plus l'écran « Autoriser » la première fois.

Si le client_id est inconnu ou si l'adresse de retour n'est pas enregistrée, Kinda-e affiche une erreur et ne redirige pas (pour ne jamais envoyer un code vers un site inconnu).

3. Le retour sur votre site

Kinda-e renvoie vers votre redirect_uri :

  • succès : ?code=...&state=... ;
  • refus ou erreur : ?error=...&state=.... Les valeurs possibles sont access_denied (la personne a refusé), login_required et consent_required (seulement avec prompt=none).

Vérifiez d'abord que state est celui que vous aviez gardé. Le code est valable 5 minutes et ne sert qu'une fois.

4. Échanger le code (de serveur à serveur)

Votre serveur envoie le code à Kinda-e avec votre secret. Le secret peut être envoyé en Authorization: Basic (recommandé) ou dans le corps (client_id, client_secret).

POST https://kinda-e.com/oauth/token.php
Authorization: Basic base64(client_id:client_secret)
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code&code=LE_CODE&redirect_uri=https%3A%2F%2Fmonsite.com%2Fkindae%2Fretour.php

Réponse :

{
  "access_token": "9f2c…64 caractères…",
  "token_type": "Bearer",
  "expires_in": 3600,
  "user": {
    "id": 1234,
    "username": "marie243",
    "nom_complet": "Marie Kabila",
    "verifie": 0,
    "photo": "https://kinda-e.com/images/avatars/KE_….webp"
  }
}

Vous avez maintenant l'identité de la personne : ouvrez votre propre session. Utilisez user.id comme identifiant (il ne change jamais, contrairement au nom d'utilisateur).

Exemple PHP complet

Deux fichiers. Ils n'ont besoin que de PHP 7.4+ et de l'extension cURL.

kindae/connexion.php — envoie la personne vers Kinda-e :

<?php
session_start();
const KINDAE_CLIENT_ID = 'mon_site';
const KINDAE_RETOUR    = 'https://monsite.com/kindae/retour.php';

$_SESSION['kindae_state'] = bin2hex(random_bytes(16));
header('Location: https://kinda-e.com/oauth/authorize.php?' . http_build_query([
    'response_type' => 'code',
    'client_id'     => KINDAE_CLIENT_ID,
    'redirect_uri'  => KINDAE_RETOUR,
    'state'         => $_SESSION['kindae_state'],
]));
exit;

kindae/retour.php — reçoit le code, l'échange, ouvre la session :

<?php
session_start();
const KINDAE_CLIENT_ID     = 'mon_site';
const KINDAE_CLIENT_SECRET = 'LE_SECRET';   // à ranger hors du code public (fichier de config non versionné)
const KINDAE_RETOUR        = 'https://monsite.com/kindae/retour.php';

// 1. Vérifier le state
$state = $_GET['state'] ?? '';
if (empty($_SESSION['kindae_state']) || !hash_equals($_SESSION['kindae_state'], $state)) {
    exit('Demande expirée, recommencez.');
}
unset($_SESSION['kindae_state']);
if (isset($_GET['error'])) {
    exit('Connexion annulée.');
}

// 2. Échanger le code contre les infos du compte
$ch = curl_init('https://kinda-e.com/oauth/token.php');
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_USERPWD        => KINDAE_CLIENT_ID . ':' . KINDAE_CLIENT_SECRET,
    CURLOPT_POSTFIELDS     => http_build_query([
        'grant_type'   => 'authorization_code',
        'code'         => $_GET['code'] ?? '',
        'redirect_uri' => KINDAE_RETOUR,
    ]),
    CURLOPT_TIMEOUT        => 10,
]);
$reponse = json_decode((string) curl_exec($ch), true);
curl_close($ch);
if (empty($reponse['user']['id'])) {
    exit('La connexion avec Kinda-e a échoué.');
}

// 3. Ouvrir votre session (et créer / mettre à jour l'utilisateur dans votre base)
session_regenerate_id(true);
$_SESSION['user_id']  = (int) $reponse['user']['id'];
$_SESSION['username'] = $reponse['user']['username'];
$_SESSION['nom']      = $reponse['user']['nom_complet'];
header('Location: /');
exit;

Connexion silencieuse : prompt=none

Pour savoir si la personne est déjà connectée à Kinda-e sans rien lui afficher, ajoutez prompt=none. Kinda-e revient immédiatement avec un code si c'est le cas, ou avec error=login_required sinon. À n'utiliser que pour une reconnexion automatique, jamais à la place du bouton.

Applications mobiles

Ne mettez jamais le client_secret dans une application mobile ou dans du JavaScript : il pourrait être extrait. Ouvrez /oauth/authorize.php dans le navigateur du téléphone (ou un onglet intégré), avec une adresse de retour sur votre serveur ; c'est votre serveur qui échange le code, puis qui renvoie l'application vers elle-même (lien profond).