Autenticación Stellar para Cuentas de Contrato (SEP-45)
Descripción general
SEP-45 (Stellar Web Authentication for Contract Accounts) permite a las aplicaciones de billeteras inteligentes crear sesiones autenticadas con anchors de Stellar demostrando el control sobre una cuenta de contrato (C...). Una vez autenticadas, las billeteras reciben un JSON Web Token (JWT) que usan en solicitudes posteriores a los servicios estandarizados del anchor.
Para la especificación completa, consulta SEP-0045: Stellar Web Authentication for Contract Accounts.
La Anchor Platform implementa SEP-45 con soporte para:
- Flujo de Challenge/Response: GET
/sep45/authpara solicitar entradas de autorización, POST/sep45/authpara validar y recibir un JWT - Autenticación de Cuenta de Contrato: Soporte para cuentas de contrato (
C...) usando entradas de autorización Soroban - Simulación de Transacciones: Simulación automática de transacciones para verificar entradas de autorización
- Múltiples Dominios Principales: Soporte para múltiples dominios y patrones comodín
SEP-45 vs SEP-10: SEP-45 no reemplaza a SEP-10. SEP-45 admite cuentas de contrato (C...), mientras que SEP-10 admite cuentas clásicas (G...) y cuentas muxed (M...). Los servicios que deseen admitir todos los tipos de cuentas deben implementar ambos SEPs.
Flujo Típico de Autenticación
- El Cliente solicita un desafío único al Servidor
- El Cliente verifica y firma el desafío
- El Cliente envía el desafío firmado al Servidor
- El Servidor verifica el desafío y responde con un token de sesión JWT
Se proporciona una implementación del contrato SEP-45 en el repositorio Anchor Platform. Una instancia de este contrato está desplegada en CD3LA6RKF5D2FN2R2L57MWXLBRSEWWENE74YBEFZSSGNJRJGICFGQXMX en testnet.
Activar SEP-45
SEP-45 requiere integración con Stellar RPC para simular transacciones. Anchor Platform puede conectarse al servidor Stellar RPC que elijas. Puedes usar un proveedor público de Stellar RPC o ejecutar el tuyo propio. Una lista de proveedores públicos se encuentra aquí.
Para habilitar SEP-45, configura las siguientes variables de entorno en tu archivo dev.env.
- bash
# dev.env
STELLAR_NETWORK_TYPE=rpc
STELLAR_NETWORK_RPC_URL=https://soroban-testnet.stellar.org
SEP45_ENABLED=true
SEP45_HOME_DOMAINS=localhost:8080
SEP45_WEB_AUTH_CONTRACT_ID="CD3LA6RKF5D2FN2R2L57MWXLBRSEWWENE74YBEFZSSGNJRJGICFGQXMX"
SECRET_SEP10_SIGNING_SEED="a Stellar private key"
SECRET_SEP45_JWT_SECRET="a secret encryption key"
Configuración requerida (si está habilitada)
| Variable | Predeterminado | Descripción |
|---|---|---|
STELLAR_NETWORK_TYPE | Requerido | Debe establecerse en rpc para SEP-45. Esto habilita el modo RPC para Anchor Platform. |
STELLAR_NETWORK_RPC_URL | Requerido | La URL del servidor Stellar RPC utilizado para simulate transacciones. Puedes usar un proveedor público o ejecutar el tuyo propio. Puedes encontrar una lista de proveedores públicos aquí. |
SEP45_ENABLED | false | Establece en true para habilitar la autenticación SEP-45 |
SEP45_HOME_DOMAINS | Requerido | Lista de dominios principales (separados por comas). Admite patrones comodín como *.stellar.org. El home_domain debe coincidir con el host donde se sirve tu archivo stellar.toml. |
SEP45_WEB_AUTH_CONTRACT_ID | Requerido | El ID del contrato del contrato SEP-45. Este contrato debe implementar la función web_auth_verify como se describe en la especificación SEP-45. |
SECRET_SEP10_SIGNING_SEED | Requerido | La clave privada correspondiente a la SIGNING_KEY en tu archivo stellar.toml. SEP-45 usa la misma clave de firma que SEP-10. Se usa para firmar los desafíos de autenticación. |
SECRET_SEP45_JWT_SECRET | Requerido | La clave de cifrado utilizada para firmar y verificar los tokens JWT emitidos a billeteras autenticadas. |
- Requisito RPC: SEP-45 requiere Stellar RPC para simulate transacciones. Debes establecer
STELLAR_NETWORK_TYPE=rpcy proporcionar unaSTELLAR_NETWORK_RPC_URLválida. - ID del contrato: El
SEP45_WEB_AUTH_CONTRACT_IDdebe coincidir con el contrato desplegado en la dirección especificada en el campoWEB_AUTH_CONTRACT_IDde tu archivostellar.toml. - Clave de firma: La
SIGNING_KEYen tu archivostellar.tomldebe ser la clave pública derivada deSECRET_SEP10_SIGNING_SEED.
Configuración opcional
- bash
# dev.env
# Optional: Specify web_auth_domain (default: first home_domain if only one is specified)
SEP45_WEB_AUTH_DOMAIN=localhost:8080
# Optional: Challenge timeout in seconds (default: 900)
SEP45_AUTH_TIMEOUT=900
# Optional: JWT token timeout in seconds (default: 86400 = 24 hours)
SEP45_JWT_TIMEOUT=86400
| Variable | Predeterminado | Descripción |
|---|---|---|
SEP45_WEB_AUTH_DOMAIN | Primer home_domain si se especifica solo uno, de lo contrario vacío | La propiedad web_auth_domain utilizada en las respuestas SEP-45. Requerido si tienes múltiples home_domains o usas patrones comodín. Debe coincidir con el host del servidor SEP. |
SEP45_AUTH_TIMEOUT | 900 | Tiempo en segundos que un desafío permanece válido. Los clientes deben firmar y enviar las entradas de autorización dentro de este período. |
SEP45_JWT_TIMEOUT | 86400 | Tiempo en segundos que un token JWT emitido permanece válido. Después de la caducidad, los clientes deben autenticarse nuevamente. |
Múltiples dominios principales: Si especificas múltiples home_domains (por ejemplo, ap.stellar.org,*.sdp.stellar.org), también debes establecer SEP45_WEB_AUTH_DOMAIN para indicar qué dominio aloja el endpoint de autenticación.
Configurar stellar.toml
Actualiza tu archivo stellar.toml para anunciar soporte para SEP-45. Las billeteras descubren tu endpoint de autenticación a través de este archivo.
- TOML
# dev.stellar.toml
ACCOUNTS = ["add your public keys for your distribution accounts here"]
SIGNING_KEY = "add your signing key here (public key from SECRET_SEP10_SIGNING_SEED)"
WEB_AUTH_FOR_CONTRACTS_ENDPOINT = "http://localhost:8080/sep45/auth"
WEB_AUTH_CONTRACT_ID = "CD3LA6RKF5D2FN2R2L57MWXLBRSEWWENE74YBEFZSSGNJRJGICFGQXMX"
Estos campos deben coincidir con las opciones de configuración establecidas en la sección Habilitar SEP-45 arriba.
WEB_AUTH_FOR_CONTRACTS_ENDPOINT - La URL donde se ejecuta el servicio de autenticación. Esta es la URL que los clientes usarán para autenticarse con el anchor. El endpoint debe admitir:
GET <WEB_AUTH_FOR_CONTRACTS_ENDPOINT>- Solicitar entradas de autorizaciónPOST <WEB_AUTH_FOR_CONTRACTS_ENDPOINT>- Intercambiar entradas de autorización firmadas por JWT de sesión
WEB_AUTH_CONTRACT_ID - El ID del contrato del contrato SEP-45. Este es el contrato que se usará para construir el desafío. El contrato debe implementar la función web_auth_verify como se describe en la especificación SEP-45. Esto debe coincidir con SEP45_WEB_AUTH_CONTRACT_ID.
SIGNING_KEY: Debe ser la clave pública derivada deSECRET_SEP10_SIGNING_SEEDWEB_AUTH_FOR_CONTRACTS_ENDPOINT: Usahttps://en producción. La ruta/sep45/authes el endpoint estándar de SEP-45.- Coincidencia de host: El host en
WEB_AUTH_FOR_CONTRACTS_ENDPOINTdebe coincidir con uno de tusSEP45_HOME_DOMAINS(o conSEP45_WEB_AUTH_DOMAINsi se especifica).