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.
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)
- Włącz dostawców w panelu sterowania (dostęp właściciela).
- Dla każdego dostawcy utwórz aplikację OAuth w konsoli tego dostawcy i zarejestruj dokładnie ten URI przekierowania:Google
https://astrina.io/auth/cb.php?provider=googleYandexhttps://astrina.io/auth/cb.php?provider=yandexApplehttps://astrina.io/auth/cb.php?provider=appleTelegram@BotFather → /setdomain → astrina.io - Paste each app's Client ID + Secret (Telegram: bot username + bot token), tick Enabled, Save.
- W sekcji Strony klientów zarejestruj każdą stronę (nazwa + dozwolone adresy URL przekierowania). Skopiuj
client_id+client_secretpokazane raz.
Integracja dla każdej strony (3 kroki)
- Skopiuj
sdk.phpdo 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'; - 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. - 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.
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