Integración de login de plataformas
Cliente del juego, validación en el Game Panel y configuración en Edit Game → Platform Configurations
Base URL API: https://gamepanel.idcgames.com/api/v1
— Endpoint: POST /auth/third-party/login
Login de plataformas: IDC Games, Steam y Epic
GuÃa para integradores: qué hace el cliente del juego con cada plataforma, qué envÃa al Game Panel, y qué debe configurar un admin en Edit Game → Platform Configurations.
---
Flujo general
Juego → Plataforma (login nativo) → user_id + token
Juego → POST /api/v1/auth/third-party/login → Panel valida con IDC/Steam/Epic
Panel → access_token + refresh_token (sesión del Game Panel)El panel no sustituye el login de la plataforma: el juego obtiene credenciales en IDC/Steam/Epic y el panel solo valida y crea o enlaza un
game_user.---
Endpoint común del Game Panel
| URL | POST https://gamepanel.idcgames.com/api/v1/auth/third-party/login |
| Content-Type | application/json |
| Auth previa | Ninguna (usa gamepanel_secret_token en el body) |
Campos comunes del JSON
| Campo | Obligatorio | Descripción |
|---|---|---|
platform | SÃ | idc, steam o epic |
token | SÃ | Token que valida la plataforma (ver tabla por plataforma) |
user_id | SÃ | ID de cuenta en esa plataforma (string) |
game_id | SÃ | ID del juego en el Game Panel |
gamepanel_secret_token | SÃ | Secreto del juego en el panel (Edit Game). No es el Client Secret de Epic ni la Steam Web API Key |
username | No | Nombre mostrado; fallback si no hay perfil remoto |
profile | No | Objeto libre que se guarda en el perfil del jugador |
details | No | none, basic o extended (respuesta enriquecida) |
Respuesta exitosa (resumen)
success: trueaccess_token/refresh_token— sesión OAuth del panel para el resto de APIs (Authorization: Bearer …)user—id,username,platform,platform_user_id,game_id, progreso, etc.- Se genera/gestiona en Games → Edit Game (campo secreto del panel).
- Lo embebe el cliente del juego (binario/build) o un backend de confianza; no debe ir en repositorios públicos.
- Sirve para el login inicial y otras APIs server-to-server del mismo juego (stats batch, compras externas, etc.) según configuración del proyecto.
user_iden el login del panel = useridc (ID numérico IDC del jugador).gameIden el check de launcher =id_gamede IDC, no elgame_iddel panel.idc_game_ido aliasplatform_game_id
Errores frecuentes HTTP
| Código | Causa habitual |
|---|---|
401 Authentication failed | Token de plataforma inválido o plataforma mal configurada |
401 Invalid GamePanel secret token | gamepanel_secret_token incorrecto |
| 403 | Plataforma no Enabled en el juego |
| 422 | JSON incompleto o platform inválido |
---
Secreto del juego (gamepanel_secret_token)
> Roadmap posible: token público solo para login y token secreto para S2S. Hoy el login usa
gamepanel_secret_token.---
IDC Games
1. Cliente del juego (IDC)
El jugador inicia sesión en auth.idcgames.com (web, widget o launcher). El juego no envÃa usuario/contraseña al Game Panel.
Tipos de token
| Origen | Token en token | Validación en auth.idcgames.com |
|---|---|---|
| Launcher / IDCLib | tokenUserGameId (MD5, ~1 min) | GET /api/launcher/check-user-game-token?userId=&gameId=&tokenUserGameId= |
| Web / legacy | JWT o token empaquetado | POST /api/web/verify-token + cabecera X-Internal-Key |
Recomendación
En cada login, enviar también el ID de juego IDC:
Si en el panel tienes IDC → app_id fijo, debe coincidir con el que mandas en la petición.
2. Login contra el Game Panel (IDC)
{
"platform": "idc",
"token": "",
"user_id": "37264",
"game_id": 1,
"gamepanel_secret_token": "gp_…",
"idc_game_id": 1599,
"username": "PlayerName",
"details": "extended"
} El panel intenta primero el check de launcher (si hay
app_id IDC configurado) y luego verify-token.3. Configuración en el panel
Edit Game → Platform Configurations → IDC
| Campo | Uso |
|---|---|
| Enabled | Activar login IDC |
| app_id | id_game en auth.idcgames.com (launcher check) |
| secret_key | INTERNAL_API_KEY por juego (fallback web verify-token) |
.env del Game Panel (global, no por juego):IDC_AUTH_BASE_URL=https://auth.idcgames.com
IDC_INTERNAL_API_KEY=Local opcional:
IDC_GAME_ID, IDC_GAME_SECRET, IDC_PANEL_GAME_ID + php artisan idc:sync-local-game-config.Documentación adicional:
docs/IDC_AUTH_VERIFICATION.md.---
Steam
1. Cliente del juego (Steam)
ISteamUser::GetAuthTicketForWebApi con identidad coherente con el panel (por defecto el panel usa gamepanel si no configuras otra).El ticket puede llegar en hex o base64; el panel normaliza a hex antes de llamar a Steam.
2. Login contra el Game Panel (Steam)
{
"platform": "steam",
"token": "",
"user_id": "76561198000000000",
"game_id": 1,
"gamepanel_secret_token": "gp_…",
"username": "SteamPlayer",
"steam_app_id": 1525710,
"steam_identity": "gamepanel",
"details": "extended"
} | Campo extra | Descripción |
|---|---|
steam_app_id / app_id | App ID Steam; si el juego lo envÃa y el panel tiene otro en config, rechaza (anti-spoof) |
steam_identity | Debe coincidir con el usado al generar el ticket (GetAuthTicketForWebApi) |
Validación panel:
ISteamUserAuth/AuthenticateUserTicket/v1/ con Web API Key + App ID + ticket; comprueba steamid = user_id.Opcional:
GetPlayerSummaries para nombre; si falla, usa username del request.3. Configuración en el panel
Edit Game → Platform Configurations → Steam
| Campo | Uso |
|---|---|
| Enabled | Activar login Steam |
| app_id | Steam App ID del juego |
| secret_key | Steam Web API Key (Partner) |
| webapi_identity | Identidad del ticket (default interno: gamepanel) |
Errores Steam habituales:
Script de prueba local:
php scripts/test-steam-ticket.php (si existe en el despliegue).---
Epic Games (EOS)
1. Cliente del juego (Epic)
Usa Epic Online Services (EOS) Auth. Para backend, Epic recomienda enviar el Id Token del jugador:
EOS_Auth_CopyIdToken"t": "id_token" (también se acepta access token "t": "epic_id").Del token o de EOS obtén:
user_id (claim sub, 32 hex)token (sin recortar)No uses tokens mock ni JWT con firma rota; Epic responde
invalid_token / firma inválida.2. Login contra el Game Panel (Epic)
{
"platform": "epic",
"token": "",
"user_id": "612ac3aa1cfb4ad3923ce6e239b4cd61",
"game_id": 1,
"gamepanel_secret_token": "gp_…",
"username": "Ewi1992",
"details": "extended"
} Validación en el panel (doc oficial Auth Web APIs v2):
https://api.epicgames.dev/epic/oauth/v2/.well-known/jwks.json, aud = Client ID del juego, sub = user_id, issuer https://api.epicgames.dev…POST https://api.epicgames.dev/epic/oauth/v2/tokenInfo body token=Tipos JWT aceptados:
id_token e epic_id.Si el perfil remoto falla, el panel usa
dn del JWT o username del request.3. Configuración en el panel
Edit Game → Platform Configurations → Epic
| Campo | Uso |
|---|---|
| Enabled | Activar login Epic |
| client_id | Client ID EOS (debe igualar aud del JWT) |
| client_secret | Client Secret EOS (token servidor / perfil v2; no sustituye la validación JWT del Id Token) |
| deployment_id | Deployment ID EOS (pfdid en el token). Opcional en verify; recomendado si quieres exigir deployment o usar client_credentials |
| api_url | Por defecto https://api.epicgames.dev |
Qué NO hace falta en el JSON del cliente
pfdid; en panel es opcional para validación extra)Errores Epic habituales
| SÃntoma | Causa |
|---|---|
| 401 tras Id Token válido en cliente | Código antiguo del panel (solo epic_id, o v1/introspect) — desplegar versión actual |
| Firma inválida en Epic | Token truncado, expirado o no es Id Token real |
client_id_mismatch | Client ID del panel ≠aud del JWT |
deployment_id_mismatch | Deployment en panel ≠pfdid del token (solo si configuraste deployment) |
Prueba local:
php scripts/test-epic-login-once.php "" .---
Configuración resumida en el panel
game_id y gamepanel_secret_token.---
Checklist del desarrollador
game_id y gamepanel_secret_token correctos en el buildidc_game_id alineado con app_id IDC en panelsteam_identity al generar el ticketEOS_Auth_CopyIdToken → JWT completo en token, Account ID en user_idaccess_token del panel en el resto de APIs---
Referencias
API_COMPLETE_REFERENCE_EN.md)