Login com Astrina
A Astrina é o intermediário de login único para o ecossistema. Configure seus provedores de login social uma vez na Astrina; cada site os reutiliza — sem aplicativos OAuth por site, sem SDKs de provedor.
Quatro saltos, e seu site nunca toca um provedor
O site envia o visitante para a Astrina
Um link com seu client_id, o endereço de retorno e um valor de estado.
O visitante escolhe uma conta
Qualquer provedor habilitado na Astrina — sem aplicativo OAuth do seu lado.
Astrina retorna um código de uso único
O código volta para o seu callback e expira em cinco minutos.
Seu servidor troca por um perfil
Um POST de servidor para servidor retorna sub, e-mail, nome e avatar.
Mostrar o diagrama de solicitação
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 }Configuração única do proprietário (no admin do Astrina)
- Ative os provedores no painel de controle (acesso do proprietário).
- Para cada provedor, crie um aplicativo OAuth no console desse provedor e registre exatamente este URI de redirecionamento: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 - Cole o Client ID + Secret de cada aplicativo (Telegram: nome de usuário do bot + token do bot), marque Habilitado, Salvar.
- Em Client sites, registre cada site (nome + URLs de redirecionamento permitidas). Copie o
client_id+client_secretmostrado uma vez.
Integração por site (3 etapas)
- Copie
sdk.phppara o site e defina quatro 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'; - Adicione os botões em qualquer lugar — um botão "Login com Astrina" (mostra o seletor), ou uma linha de botões de provedores diretos (um clique em Google vai direto para o Google, sem página de seleção):
<!-- 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()busca os provedores que você habilitou no Astrina e renderiza exatamente esses, cada um vinculado diretamente ao provedor. - Crie a página de callback (
astrina-callback.php) na URL de redirecionamento: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;
É isso — sem aplicativos OAuth por site, sem SDKs de provedores. Adicionar um novo provedor depois é uma mudança de uma linha no Astrina; cada site recebe automaticamente.
sub é um id estável e opaco por identidade. Trate o email como informativo (Telegram não fornece nenhum; os usuários podem alterá-lo).
A resposta do token também carrega um id_token (JWT HS256 assinado com seu segredo do cliente) se você preferir verificar localmente em vez de confiar no JSON.
Os códigos são de uso único e expiram em 5 minutos; state é verificado tanto pelo SDK quanto pelo Astrina.
Referência em texto simples: README.md · baixar sdk.php