← API de desarrollador Para desarrolladores

Iniciar sesión con Astrina

Astrina es el intermediario de inicio de sesión único para el ecosistema. Configura tus proveedores de inicio de sesión social una vez en Astrina; cada sitio los reutiliza — sin aplicaciones OAuth por sitio, sin SDKs de proveedores.

Cómo funciona el flujo

Cuatro saltos, y tu sitio nunca toca a un proveedor

El sitio envía al visitante a Astrina

Un enlace con tu client_id, la dirección de retorno y un valor de estado.

El visitante elige una cuenta

Cualquier proveedor habilitado en Astrina — sin aplicación OAuth de tu lado.

Astrina devuelve un código de un solo uso

El código regresa a tu callback y expira en cinco minutos.

Tu servidor lo intercambia por un perfil

Un POST de servidor a servidor devuelve sub, correo electrónico, nombre y avatar.

Mostrar el diagrama de solicitud
  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 }

Configuración única del propietario (en el administrador de Astrina)

  1. Habilite los proveedores en el panel de control (acceso de propietario).
  2. Para cada proveedor, crea una aplicación OAuth en la consola de ese proveedor y registra exactamente esta URI de redirección:
    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. Pega el Client ID + Secret de cada aplicación (Telegram: nombre de usuario del bot + token del bot), marca Habilitado, Guardar.
  4. Bajo Sitios de clientes, registra cada sitio (nombre + URLs de redirección permitidas). Copia el client_id + client_secret mostrado una vez.

Integración por sitio (3 pasos)

  1. Copia sdk.php en el sitio y establece cuatro 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. Agrega los botones en cualquier lugar — un botón de "Iniciar sesión con Astrina" (muestra el selector), o una fila de botones de proveedores directos (un clic en Google salta directamente a Google, sin página de selección):
    <!-- 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() obtiene los proveedores que habilitaste en Astrina y renderiza exactamente esos, cada uno vinculado directamente al proveedor.

  3. Crea la página de callback (astrina-callback.php) en la URL de redirección:
    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;

Eso es todo — sin aplicaciones OAuth por sitio, sin SDKs de proveedores. Agregar un nuevo proveedor más tarde es un cambio de una fila en Astrina; cada sitio lo recibe automáticamente.

Notas

sub es un id estable y opaco por identidad. Trata el correo electrónico como informativo (Telegram no proporciona ninguno; los usuarios pueden cambiarlo).

La respuesta del token también lleva un id_token (JWT HS256 firmado con tu secreto de cliente) si prefieres verificar localmente en lugar de confiar en el JSON.

Los códigos son de un solo uso y expiran en 5 minutos; state es verificado tanto por el SDK como por Astrina.

Referencia en texto plano: README.md · descargar sdk.php