← API développeur Pour les développeurs

Se connecter avec Astrina

Astrina est le courtier de connexion unique pour l'écosystème. Configurez vos fournisseurs de connexion sociale une fois dans Astrina ; chaque site les réutilise — pas d'applications OAuth par site, pas de SDK de fournisseur.

Comment le flux fonctionne

Quatre sauts, et votre site ne touche jamais un fournisseur

Le site envoie le visiteur à Astrina

Un lien avec votre client_id, l'adresse de retour et une valeur d'état.

Le visiteur choisit un compte

Tout fournisseur activé dans Astrina — pas d'application OAuth de votre côté.

Astrina renvoie un code à usage unique

Le code revient à votre callback et expire dans cinq minutes.

Votre serveur l'échange contre un profil

Un POST serveur à serveur renvoie sub, email, nom et avatar.

Afficher le diagramme de la requête
  Site  ──(1) redirect──▶  astrina.io/auth/authorize.php  ──▶  provider (Google…)
   ▲                                    │                              │
   └──(3) ?code=…&state=… ◀──── astrina.io/auth/cb.php ◀──(2) callback ─┘
   │
   └──(4) POST code ──▶ astrina.io/auth/token.php ──▶ { sub, email, name, avatar }

Configuration unique du propriétaire (dans l'administration d'Astrina)

  1. Activez les fournisseurs dans le panneau de contrôle (accès propriétaire).
  2. Pour chaque fournisseur, créez une application OAuth dans la console de ce fournisseur et enregistrez exactement cette URI de redirection :
    Googlehttps://astrina.io/auth/cb.php?provider=google
    Yandexhttps://astrina.io/auth/cb.php?provider=yandex
    Applehttps://astrina.io/auth/cb.php?provider=apple
    Telegram@BotFather → /setdomain → astrina.io
  3. Collez le Client ID + Secret de chaque application (Telegram : nom d'utilisateur du bot + jeton du bot), cochez Activé, Enregistrer.
  4. Sous Sites clients, enregistrez chaque site (nom + URLs de redirection autorisées). Copiez le client_id + client_secret affiché une fois.

Intégration par site (3 étapes)

  1. Copiez sdk.php dans le site et définissez quatre constantes :
    define('ASTRINA_CLIENT_ID',     'astr_xxxxxxxx');
    define('ASTRINA_CLIENT_SECRET', '…');   // server-side only, never in JS
    define('ASTRINA_REDIRECT_URI',  'https://mysite/auth/astrina-callback.php');
    require '/path/to/sdk.php';
  2. Ajoutez les boutons n'importe où — un bouton "Connexion avec Astrina" (affiche le sélecteur), ou une rangée de boutons de fournisseur directs (un clic sur Google vous amène directement à Google, sans page de sélection) :
    <!-- one button → Astrina chooser -->
    <a class="btn" href="<?= htmlspecialchars(AstrinaID::loginUrl()) ?>">Log in with Astrina</a>
    
    <!-- OR: direct per-provider buttons + the "Secured by Astrina ID" note -->
    <?= AstrinaID::buttonsHtml() ?>
    
    <!-- OR: hand-rolled, straight to one provider -->
    <a href="<?= htmlspecialchars(AstrinaID::loginUrl('google')) ?>">Continue with Google</a>

    buttonsHtml() récupère les fournisseurs que vous avez activés dans Astrina et les rend exactement, chacun étant lié en profondeur au fournisseur.

  3. Créez la page de rappel (astrina-callback.php) à l'URL de redirection :
    require 'config.php';           // defines the constants + sdk.php
    $u = AstrinaID::handleCallback();
    if (!$u) { header('Location: /login?e=1'); exit; }
    // key your local user on ($u['provider'], $u['sub']) — NOT email
    $local = find_or_create_user($u['provider'], $u['sub'], $u['email'], $u['name'], $u['avatar']);
    login($local); header('Location: /'); exit;

C'est tout — pas d'applications OAuth par site, pas de SDK de fournisseur. Ajouter un nouveau fournisseur plus tard est un changement d'une ligne dans Astrina ; chaque site l'obtient automatiquement.

Notes

sub est un identifiant stable et opaque par identité. Traitez l'email comme informatif (Telegram n'en fournit aucun ; les utilisateurs peuvent le changer).

La réponse du jeton contient également un id_token (JWT HS256 signé avec votre secret client) si vous préférez vérifier localement plutôt que de faire confiance au JSON.

Les codes sont à usage unique et expirent en 5 minutes ; state est vérifié à la fois par le SDK et par Astrina.

Référence en texte clair : README.md · télécharger sdk.php