← API do desenvolvedor Para desenvolvedores

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.

Como o fluxo funciona

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)

  1. Ative os provedores no painel de controle (acesso do proprietário).
  2. Para cada provedor, crie um aplicativo OAuth no console desse provedor e registre exatamente este URI de redirecionamento:
    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. Cole o Client ID + Secret de cada aplicativo (Telegram: nome de usuário do bot + token do bot), marque Habilitado, Salvar.
  4. Em Client sites, registre cada site (nome + URLs de redirecionamento permitidas). Copie o client_id + client_secret mostrado uma vez.

Integração por site (3 etapas)

  1. Copie sdk.php para 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';
  2. 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.

  3. 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.

Notas

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