← Entwickler-API Für Entwickler

Mit Astrina anmelden

Astrina ist der Single-Sign-On-Broker für das Ökosystem. Konfigurieren Sie Ihre sozialen Login-Anbieter einmal in Astrina; jede Seite verwendet sie wieder — keine site-spezifischen OAuth-Apps, keine Anbieter-SDKs.

Wie der Ablauf funktioniert

Vier Hops, und Ihre Seite berührt niemals einen Anbieter

Die Seite sendet den Besucher zu Astrina

Ein Link mit Ihrer client_id, der Rücksendeadresse und einem Statuswert.

Der Besucher wählt ein Konto aus

Jeder Anbieter, der in Astrina aktiviert ist — keine OAuth-App auf Ihrer Seite.

Astrina gibt einen einmaligen Code zurück

Der Code kommt zu Ihrem Callback zurück und läuft in fünf Minuten ab.

Ihr Server tauscht es gegen ein Profil aus

Ein Server-zu-Server-POST gibt sub, E-Mail, Name und Avatar zurück.

Zeigen Sie das Anforderungsdiagramm
  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 }

Einmalige Eigentümereinrichtung (in Astrina admin)

  1. Aktivieren Sie die Anbieter im Kontrollpanel (Besitzerzugang).
  2. Für jeden Anbieter eine OAuth-App in der Konsole dieses Anbieters erstellen und genau diese Umleitungs-URI registrieren:
    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. Fügen Sie die Client ID + Secret jeder App ein (Telegram: Bot-Benutzername + Bot-Token), aktivieren Sie Enabled, Speichern.
  4. Unter Client sites jede Seite registrieren (Name + erlaubte Umleitungs-URLs). Kopieren Sie die client_id + client_secret, die einmal angezeigt wird.

Integration pro Seite (3 Schritte)

  1. Kopieren Sie sdk.php in die Seite und setzen Sie vier Konstanten:
    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. Fügen Sie die Schaltflächen überall hinzu — eine Schaltfläche "Mit Astrina anmelden" (zeigt den Wähler), oder eine Reihe von direkten Anbieter-Schaltflächen (ein Klick auf Google springt direkt zu Google, keine Wählerseite):
    <!-- 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() ruft die Anbieter ab, die Sie in Astrina aktiviert haben, und rendert genau diese, jeder tief verlinkt zum Anbieter.

  3. Erstellen Sie die Callback-Seite (astrina-callback.php) an der Umleitungs-URL:
    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;

Das war's — keine OAuth-Apps pro Seite, keine Anbieter-SDKs. Einen neuen Anbieter später hinzuzufügen ist eine einzeilige Änderung in Astrina; jede Seite erhält es automatisch.

Notizen

sub ist eine stabile, undurchsichtige ID pro Identität. Behandeln Sie die E-Mail als informativ (Telegram gibt keine; Benutzer können sie ändern).

Die Token-Antwort enthält auch ein id_token (JWT HS256, signiert mit Ihrem Client-Geheimnis), wenn Sie es vorziehen, lokal zu verifizieren, anstatt dem JSON zu vertrauen.

Codes sind einmalig und verfallen nach 5 Minuten; state wird sowohl vom SDK als auch von Astrina überprüft.

Klartextreferenz: README.md · sdk.php herunterladen