← API dla deweloperów Dla deweloperów

Zaloguj się z Astriną

Astrina jest pośrednikiem logowania jednolitym dla ekosystemu. Skonfiguruj swoich dostawców logowania społecznościowego raz w Astrina; każda strona je ponownie wykorzystuje — bez aplikacji OAuth dla każdej strony, bez SDK dostawcy.

Jak działa przepływ

Cztery skoki, a twoja strona nigdy nie dotyka dostawcy

Strona wysyła odwiedzającego do Astrina

Jeden link z twoim client_id, adresem zwrotnym i wartością stanu.

Odwiedzający wybiera konto

Dowolny dostawca włączony w Astrina — żadna aplikacja OAuth po twojej stronie.

Astrina zwraca jednorazowy kod

Kod wraca do twojego callbacka i wygasa po pięciu minutach.

Twój serwer wymienia go na profil

POST serwer-do-serwera zwraca sub, email, imię i awatar.

Pokaż diagram żądania
  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 }

Jednorazowa konfiguracja właściciela (w panelu administracyjnym Astrina)

  1. Włącz dostawców w panelu sterowania (dostęp właściciela).
  2. Dla każdego dostawcy utwórz aplikację OAuth w konsoli tego dostawcy i zarejestruj dokładnie ten URI przekierowania:
    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. Paste each app's Client ID + Secret (Telegram: bot username + bot token), tick Enabled, Save.
  4. W sekcji Strony klientów zarejestruj każdą stronę (nazwa + dozwolone adresy URL przekierowania). Skopiuj client_id + client_secret pokazane raz.

Integracja dla każdej strony (3 kroki)

  1. Skopiuj sdk.php do strony i ustaw cztery stałe:
    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. Dodaj przyciski wszędzie — jeden przycisk "Zaloguj się z Astrina" (wyświetla wybór), lub rząd przycisków bezpośrednich dostawców (kliknięcie na Google przenosi bezpośrednio do Google, bez strony wyboru):
    <!-- 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() pobiera dostawców, których włączyłeś w Astrina i renderuje dokładnie tych, każdy z głębokim linkiem do dostawcy.

  3. Utwórz stronę zwrotną (astrina-callback.php) pod adresem URL przekierowania:
    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;

To wszystko — brak aplikacji OAuth dla każdej strony, brak SDK dostawcy. Dodanie nowego dostawcy później to zmiana w jednej linii w Astrina; każda strona otrzymuje to automatycznie.

Notatki

sub to stabilny, nieprzezroczysty identyfikator dla każdej tożsamości. Traktuj e-mail jako informacyjny (Telegram nie podaje żadnego; użytkownicy mogą go zmieniać).

Odpowiedź tokena zawiera również id_token (JWT HS256 podpisany twoim sekretem klienta), jeśli wolisz weryfikować lokalnie zamiast ufać JSON-owi.

Kody są jednorazowe i wygasają po 5 minutach; state jest sprawdzany zarówno przez SDK, jak i przez Astrina.

Referencja w formacie tekstowym: README.md · pobierz sdk.php