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