> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Autenticación de inicio de sesión anónimo de servidor

> Configure el inicio de sesión anónimo de PlayFab con creación de jugadores en el lado del servidor mediante la autenticación con CustomID, protegiendo los títulos HTML5 y JavaScript frente a registros no autorizados.

# Configuración de la autenticación de PlayFab mediante inicio de sesión anónimo

En esta guía se muestra cómo implementar la autenticación de PlayFab mediante las API de inicio de sesión anónimo con protección en el lado del servidor, centrándose únicamente en la autenticación con CustomID usando HTML5/JavaScript.

## Información general

<Info>
  El 30 de junio de 2025, todos los títulos recién creados tendrán deshabilitada la creación de jugadores mediante las API anónimas.
</Info>

Para mejorar la seguridad del inicio de sesión anónimo, PlayFab implementó una característica de seguridad crucial que separa las capacidades de creación de jugadores entre las API del lado del cliente y las del lado del servidor.

1. **Creación de jugadores en el lado del cliente deshabilitada**:
   * Para los títulos recién creados, todas las API de inicio de sesión anónimo en el lado del cliente (`LoginWithCustomID`, `LoginWithAndroidDeviceID`, `LoginWithIOSDeviceID`, `LoginWithNintendoSwitchDeviceId`) ya no crean automáticamente nuevas cuentas de jugador. Los títulos creados antes del 30 de junio de 2025 pueden deshabilitar el inicio de sesión anónimo mediante la [configuración de Game Manager](/services/playfab/identity/player-identity/platform-specific-authentication/anonymous-login#configuring-player-creation-settings).
   * Deshabilitar la creación de jugadores en el lado del cliente evita la creación de cuentas no autorizada directamente desde clientes no autorizados.
   * Solo los jugadores existentes pueden iniciar sesión mediante las API del lado del cliente.
2. **Creación de jugadores en el lado del servidor habilitada**:
   * La creación de cuentas de jugador ahora se controla mediante las API del lado del servidor (`LoginWithCustomID`, `LoginWithAndroidDeviceID`, `LoginWithIOSDeviceID`, `LoginWithNintendoDeviceId`).
   * Esto garantiza que toda la creación de cuentas se realice en un entorno seguro y controlado.

## Requisitos previos

* Un identificador único para el jugador (CustomID)
* Un título registrado en [PlayFab](https://developer.playfab.com/)
* La clave secreta de su título de PlayFab
* Estar familiarizado con los [conceptos básicos y las prácticas recomendadas de inicio de sesión](/services/playfab/identity/player-identity/login/login-basics-best-practices)
* Un servidor con un nombre de dominio válido para servir archivos HTML estáticos

<Note>
  Si necesita ayuda para configurar un servidor, consulte el tutorial [Ejecución de un servidor HTTP para pruebas](/services/playfab/identity/player-identity/platform-specific-authentication/running-an-http-server-for-testing). A lo largo de esta guía, supondremos que su dominio es `http://playfab.example`.
</Note>

## Flujo de autenticación

1. **Creación de cuentas en el lado del servidor**:
   * Use `Server/LoginWithCustomID` con la API de servidor para crear nuevos jugadores
   * Requiere una clave secreta del título
   * Referencia: [API de servidor - Login With Custom ID](xref:titleid.playfabapi.com.server.authentication.loginwithcustomid)
2. **Inicio de sesión en el lado del cliente**:
   * Use `Client/LoginWithCustomID` con la API de cliente para iniciar la sesión de jugadores existentes
   * Referencia: [API de cliente - Login With Custom ID](xref:titleid.playfabapi.com.client.authentication.loginwithcustomid)

## Pasos de implementación

### 1. Configure el entorno de desarrollo

1. Descargue el SDK de JavaScript desde la [documentación del SDK de JavaScript](/services/playfab/sdks/javascript/)
2. Instale los paquetes de Node.js necesarios:

```bash theme={null}
npm install playfab-sdk
```

### 2. Implementación en el lado del servidor (Node.js)

<Info>
  Mantenga segura la clave secreta del título y nunca la exponga en el código del lado del cliente. La clave secreta solo debe usarse en entornos de servidor seguros.
</Info>

```javascript theme={null}
const { create } = require('domain');
const http = require('http');
const PlayFab = require('playfab-sdk');
const PlayFabServer = require('playfab-sdk/Scripts/PlayFab/PlayFabServer');

// Initialize PlayFab settings
PlayFab.settings.titleId = "YOUR_TITLE_ID"; // Replace with your actual PlayFab Title ID
PlayFab.settings.developerSecretKey = "YOUR_SECRET_KEY"; // Replace with your actual secret key

// Callback function for PlayFab API responses
function onPlayFabResponse(error, result) {
    if (error) {
        console.error("PlayFab Error:", error);
        return;
    }
    console.log("PlayFab Success:", result);
}

// Function to create user with custom ID
function createUserWithCustomId(customId, callback) {
    PlayFab.PlayFabServer.LoginWithCustomID({
        CreateAccount: true,
        CustomId: customId,
    }, (error, result) => {
        if (error) {
            console.error("PlayFab Error:", error);
            callback(error);
            return;
        }
        console.log("PlayFab Success:", result);
        callback(null, result.data);
    });
}

const customId = "YOUR_CUSTOM_ID"; // Replace with your actual custom ID
const server = http.createServer((req, res) => {
    res.writeHead(200, {'Content-Type': 'application/json'});
    createUserWithCustomId(customId, (error, result) => {
        if (error) {
            res.end(JSON.stringify({ error: error }));
            return;
        }
        res.end(JSON.stringify({ success: result }));
    });
});

const port = 3000;
server.listen(port, () => {
  console.log(`Server running at http://localhost:${port}/`);
});
```

### 3. Implementación en el lado del cliente (HTML)

```html theme={null}
<!DOCTYPE html>
<html>
<head>
    <script src="PlayFabSdk/src/PlayFab/PlayFabClientApi.js"></script>
</head>
<body>
    <p>Server LoginWithCustomId Auth Example</p>
    <button onclick="loginWithCustomID()">Log In with CustomId</button>
    <script>
        function loginWithCustomID() {
            var customId = "YOUR_CUSTOM_ID";
            PlayFabClientSDK.LoginWithCustomID({
                CustomId: customId,
                TitleId: YOUR_TITLE_ID,
            }, onPlayFabResponse);
        }
       

        function onPlayFabResponse(response, error) {
            if (response)
                logLine("Response: " + JSON.stringify(response));
            if (error)
                logLine("Error: " + JSON.stringify(error));
        }

        function logLine(message) {
            var textnode = document.createTextNode(message);
            document.body.appendChild(textnode);
            var br = document.createElement("br");
            document.body.appendChild(br);
        }
    </script>
</body>
</html>
```

## Configuración de las opciones de creación de jugadores

### Para títulos existentes

1. Vaya al portal para desarrolladores de PlayFab y seleccione su título
2. Vaya a **Settings**.
3. Seleccione la pestaña **API Features**.
4. Active la casilla para evitar que se creen nuevas cuentas de jugador mediante las API de inicio de sesión anónimo

<img src="https://mintcdn.com/microsoft-4404708b/mLCHf0iQv3VidfBe/images/playfab/identity/player-identity/platform-specific-authentication/tutorials/anonymous-html5/existing_title.png?fit=max&auto=format&n=mLCHf0iQv3VidfBe&q=85&s=93fa9bb45336593fc9a984f67a77b81c" alt="Deshabilitación de la creación de jugadores mediante Client/LoginWithCustomId" width="499" height="228" data-path="images/playfab/identity/player-identity/platform-specific-authentication/tutorials/anonymous-html5/existing_title.png" />

### Para títulos nuevos

<Warning>
  Habilitar la creación automática de jugadores para las API de inicio de sesión anónimo puede poner en peligro la seguridad. Habilite esta característica solo temporalmente durante el desarrollo o las pruebas. Deshabilítela siempre antes de pasar a producción.
</Warning>

Los títulos nuevos tienen deshabilitada de forma predeterminada la creación de jugadores mediante las API anónimas. Para habilitarla con fines de prueba, haga lo siguiente:

1. Vaya al portal para desarrolladores de PlayFab y seleccione su título
2. Vaya a **Settings**.
3. Seleccione la pestaña **API Features**.
4. Desactive la casilla para permitir que se creen nuevas cuentas de jugador mediante las API de inicio de sesión anónimo

<img src="https://mintcdn.com/microsoft-4404708b/mLCHf0iQv3VidfBe/images/playfab/identity/player-identity/platform-specific-authentication/tutorials/anonymous-html5/new_title.png?fit=max&auto=format&n=mLCHf0iQv3VidfBe&q=85&s=3f059a42ec2a12c62b5a1124c1c92333" alt="Habilitación de la creación de jugadores mediante Client/LoginWithCustomId" width="487" height="228" data-path="images/playfab/identity/player-identity/platform-specific-authentication/tutorials/anonymous-html5/new_title.png" />

## Ejemplos de pruebas y respuestas

### Ejemplo de respuesta del servidor

Cuando se crea correctamente un usuario mediante la API de servidor, se recibe una respuesta similar a la siguiente:

```json theme={null}
{
    "code": 200,
    "status": "OK",
    "data": {
        "PlayFabId": "PLAYFAB_ID",
        "SessionTicket": "SESSION_TICKET",
        "NewlyCreated": true
    }
}
```

### Ejemplo de respuesta del cliente

Al intentar crear una nueva cuenta desde la API de cliente (que ahora está deshabilitada), se recibe un error:

```json theme={null}
{
    "code": 400,
    "status": "BadRequest",
    "error": "PlayerCreationDisabled"
}
```

Cuando se inicia correctamente la sesión de un usuario existente mediante la API de cliente:

```json theme={null}
{
    "code": 200,
    "status": "OK",
    "data": {
        "PlayFabId": "PLAYFAB_ID",
        "SessionTicket": "SESSION_TICKET",
        "NewlyCreated": false
    }
}
```

## Lecturas adicionales

* [Información general sobre la autenticación de PlayFab](/services/playfab/identity/player-identity/authentication)
* [Conceptos básicos y prácticas recomendadas de inicio de sesión](/services/playfab/identity/player-identity/login/login-basics-best-practices)
* [Ejecución de un servidor HTTP para pruebas](/services/playfab/identity/player-identity/platform-specific-authentication/running-an-http-server-for-testing)


## Related topics

- [Conceptos básicos y prácticas recomendadas de inicio de sesión](/es/services/playfab/identity/player-identity/login/login-basics-best-practices.md)
- [Control de varios inicios de sesión de PlayFab](/es/services/playfab/identity/player-identity/login/multiple-logins.md)
- [Inicio de sesión del jugador](/es/services/playfab/identity/player-identity/login/index.md)
- [Migración del inicio de sesión de Google al de Google Play Games en Unity](/es/services/playfab/identity/player-identity/platform-specific-authentication/google-play-games-sign-in-migration-details.md)
- [Inicio de sesión de usuario](/es/services/xbox-services/fundamentals/identity/auth/live-authentication-nav.md)
