> ## 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.

# Directiva de acceso a las API

> Describe cómo usar las directivas de acceso a las API en PlayFab.

La directiva de acceso a las API controla el acceso a los recursos de las API. En ocasiones, es necesario que un título permita o deniegue determinadas API desde el cliente del juego, con fines antitrampas o por otros motivos de seguridad. Puede controlar el acceso mediante instrucciones de directiva para especificar un conjunto de reglas de acceso que se aplican en situaciones concretas.

En este tema se describe el uso de directivas de permisos de API para crear las reglas adecuadas.

También puede administrar la directiva de acceso a las API de su título directamente en Game Manager. Para obtener más información, consulte [Directiva de acceso a las API en Game Manager](/services/playfab/live-service-management/gamemanager/api-access-page-doc).

<Info>
  En esta guía se describen técnicas avanzadas. Si se aplica de forma incorrecta, es posible deshabilitar por completo el acceso del cliente a su título mediante esta característica.
</Info>

## Control y estructura de las directivas

Los títulos usan las llamadas a la API de administración de PlayFab para recuperar y actualizar las directivas de acceso. Las dos llamadas específicas que se usan para establecer la directiva de acceso a las API son [GetPolicy](xref:titleid.playfabapi.com.admin.authentication.getpolicy) y [UpdatePolicy](xref:titleid.playfabapi.com.admin.authentication.updatepolicy). Para obtener más información sobre las llamadas a la API de administración, consulte [Referencia de la API de PlayFab](https://learn.microsoft.com/en-us/rest/api/services/services/playfab/admin/).

Para usar la API de administración, debe proporcionar la clave secreta de desarrollador asociada a su título. La clave de desarrollador se usa para autorizar a su título a realizar llamadas a la API de administración. Para obtener información sobre cómo recuperar su clave secreta, consulte [Administración de claves secretas](/services/playfab/live-service-management/gamemanager/secret-key-management).

Cada directiva contiene una lista de instrucciones, que actúan como reglas para uno o varios recursos de PlayFab. PlayFab define un conjunto predeterminado de instrucciones de directiva que permite todas las directivas. Si elimina este conjunto de instrucciones de directiva sin reemplazarlo, su título no podrá llamar a las API de cliente.

Las instrucciones de directiva predeterminadas de PlayFab:

```json theme={null}
    "Statements": [
        {
            "Resource": "pfrn:api--*",
            "Action": "*",
            "Effect": "Allow",
            "Principal": "*",
            "Comment": "The default allow all policy"
        }
    ]
```

Cada conjunto de instrucciones de permisos consta de los siguientes elementos, tal como se definen en [Authentication - Update Policy](xref:titleid.playfabapi.com.admin.authentication.updatepolicy#permissionstatement):

* Resource: cadena que identifica de forma única uno o varios recursos de PlayFab. Para describir el recurso de API, use la convención que se muestra a continuación. `pfrn:api--/API-GROUP/API-CALL` Especifique la API de cliente como el `API-GROUP`: `Client`, `Server` o `Admin`. Reemplace `API-CALL` por un nombre de API como `ConfirmPurchase`, `LoginWithTwitch` o `ReportPlayer`. Una cadena de recurso admite caracteres comodín. La siguiente cadena de recurso coincide con cualquier recurso. `pfrn:api--*`
* Action: cadena que describe una operación que se va a realizar en el recurso. Use `*` para que coincida con cualquier operación.
* Effect: cadena que especifica una definición de regla. Use `Allow` o `Deny` para permitir o denegar operaciones sobre el recurso.
* Principal: cadena que identifica de forma única la clase del usuario. Use `*` para que coincida con cualquier usuario.
* Comment: cadena definida por el usuario que proporciona más información sobre la instrucción de directiva.
* ApiConditions: *objeto opcional* que define condiciones de regla avanzadas, por ejemplo, cifrado y encabezados firmados.

Puede establecer reglas de seguridad sólidas para su aplicación modificando la directiva para usar instrucciones de permisos más detalladas que solo permitan el acceso de las API que usa en su aplicación.

En el ejemplo siguiente se muestra cómo restringir la llamada `DeleteCharacterFromUser`:

```json theme={null}
    {
        "Resource": "pfrn:api--/Server/DeleteCharacterFromUser",
        "Action": "",
        "Effect": "Deny",
        "Principal": "",
        "Comment": "Disable server character delete"
    }
```

## Ejemplo de directiva de acceso a las API

En el siguiente ejemplo de código se muestran las operaciones básicas con directivas. El código realiza las siguientes acciones:

* Recupera y registra la **Policy** existente.
* Actualiza la directiva.
* Recupera y registra de nuevo la **Policy** existente.

```csharp theme={null}
public void Start() {
    PlayFabSettings.staticSettings.DeveloperSecretKey = "<insert key here>";
    PlayFabSettings.TitleId = "< insert title id here >";
    FetchApiPolicy(UpdateApiPolicy);
}

private void FetchApiPolicy(Action nextAction = null) {
    PlayFabAdminAPI.GetPolicy(new GetPolicyRequest() {
        PolicyName = "ApiPolicy"
    }, result => {
        Debug.Log(result.PolicyName);
        foreach (var statement in result.Statements)
        {
            Debug.Log("Action: "+ statement.Action);
            Debug.Log("Comment: "+ statement.Comment);
            if(statement.ApiConditions != null)
                Debug.Log("ApiCondition.HashSignatureOrEncryption: "+ statement.ApiConditions.HasSignatureOrEncryption);
            Debug.Log("Effect: "+ statement.Effect);
            Debug.Log("Principal: "+statement.Principal);
            Debug.Log("Resource: "+ statement.Resource);
        }

        if (nextAction != null) nextAction();

    },error=>Debug.LogError(error.GenerateErrorReport()));
}

private void UpdateApiPolicy() {
    PlayFabAdminAPI.UpdatePolicy(new UpdatePolicyRequest() {
        PolicyName = "ApiPolicy",
        OverwritePolicy = false, // Append to existing policy. Set to True, to overwrite.
        Statements = new List<PermissionStatement>() {
            new PermissionStatement() {
                Action = "*", // Statement effects Execute action
                ApiConditions = new ApiCondition() {
                    HasSignatureOrEncryption = Conditionals.False // Require no RSA encrypted payload or signed headers
                },
                Comment = "Do not allow clients to confirm purchase",
                Resource = "pfrn:api--/Client/ConfirmPurchase", // Resource name
                Effect = EffectType.Deny, // Do not allow,
                Principal = "*"
            }
        }
    }, result => {
        FetchApiPolicy();
    }, error => Debug.LogError(error.GenerateErrorReport()));
}
```

La imagen siguiente muestra un ejemplo de la salida después de ejecutar el código por primera vez. Como se muestra, la directiva consta de varias [instrucciones de permisos](xref:titleid.playfabapi.com.admin.authentication.updatepolicy#permissionstatement).

<img src="https://mintcdn.com/microsoft-4404708b/5IpvKlT-jmAaVkeY/images/playfab/api-references/images/game-manager-admin-api-get-update-policy-csharp-output.png?fit=max&auto=format&n=5IpvKlT-jmAaVkeY&q=85&s=2cfa94f6daa0d6e7cda3041bbb8d04a4" alt="Game Manager - API de administración - Get-Update Policy - Salida de C#" width="656" height="535" data-path="images/playfab/api-references/images/game-manager-admin-api-get-update-policy-csharp-output.png" />


## Related topics

- [Directiva de acceso a las API en Game Manager](/es/services/playfab/live-service-management/gamemanager/api-access-page-doc.md)
- [Directivas de acceso](/es/services/xbox-services/fundamentals/s2s-auth-calls/custom-service-config/access-policies/live-access-policies-nav.md)
- [Información general de las directivas de acceso](/es/services/xbox-services/fundamentals/s2s-auth-calls/custom-service-config/access-policies/live-access-policies-overview.md)
- [Configuración de directivas de acceso en Partner Center](/es/services/xbox-services/fundamentals/s2s-auth-calls/custom-service-config/access-policies/config/live-access-policies-udc.md)
- [Descripción de las API del medidor de escrituras de perfil](/es/services/playfab/pricing/meters/profile-writes.md)
