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

# Política de acesso à API

> Descreve como usar as políticas de acesso à API no PlayFab.

A Política de Acesso à API controla o acesso aos recursos da API. Às vezes, é necessário que um título permita ou negue determinadas APIs do cliente do jogo, para fins de antitrapaça ou outros fins de segurança. Você pode controlar o acesso usando Declarações de Política para especificar um conjunto de regras de acesso que são aplicadas em situações específicas.

Este tópico discute o uso de políticas de permissão de API para criar as regras apropriadas.

Você também pode gerenciar a política de acesso à API do seu título diretamente no Game Manager. Para obter mais informações, confira [Política de Acesso à API no Game Manager](/pt-BR/services/playfab/live-service-management/gamemanager/api-access-page-doc).

<Info>
  Este guia discute técnicas avançadas. Se aplicado incorretamente, é possível desabilitar completamente o acesso do cliente ao seu título usando este recurso.
</Info>

## Controle e estrutura da política

Os títulos usam as chamadas da API Admin do PlayFab para recuperar e atualizar as políticas de acesso. As duas chamadas específicas que você usa para definir a política de acesso à API são [GetPolicy](xref:titleid.playfabapi.com.admin.authentication.getpolicy) e [UpdatePolicy](xref:titleid.playfabapi.com.admin.authentication.updatepolicy). Para obter mais informações sobre as chamadas da API Admin, confira [Referência da API do PlayFab](https://learn.microsoft.com/en-us/rest/api/services/services/playfab/admin/).

Para usar a API Admin, você deve fornecer a chave secreta do desenvolvedor associada ao seu título. A chave do desenvolvedor é usada para autorizar seu título a fazer chamadas da API Admin. Para obter informações sobre como recuperar sua chave secreta, confira [Gerenciamento de chaves secretas](/pt-BR/services/playfab/live-service-management/gamemanager/secret-key-management).

Cada política contém uma lista de declarações, que funcionam como regras para um ou mais recursos do PlayFab. O PlayFab define um conjunto padrão de declarações de política que permite todas as políticas. Se você excluir esse conjunto de declarações de política sem substituí-lo, seu título não poderá chamar as APIs de cliente.

As declarações de política padrão do PlayFab:

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

Cada conjunto de Declarações de Permissão consiste nos seguintes itens, conforme definido em [Authentication - Update Policy](xref:titleid.playfabapi.com.admin.authentication.updatepolicy#permissionstatement):

* Resource - Uma cadeia de caracteres que identifica exclusivamente um ou mais recursos do PlayFab. Para descrever o recurso da API, use a convenção mostrada abaixo. `pfrn:api--/API-GROUP/API-CALL` Especifique a API de cliente como o `API-GROUP`: `Client`, `Server` ou `Admin`. Substitua `API-CALL` por um nome de API, como `ConfirmPurchase`, `LoginWithTwitch` ou `ReportPlayer`. Uma cadeia de caracteres de recurso dá suporte a curingas. A cadeia de caracteres de recurso a seguir corresponde a qualquer recurso. `pfrn:api--*`
* Action - Uma cadeia de caracteres que descreve uma operação a ser executada no recurso. Use `*` para corresponder a qualquer operação.
* Effect - Uma cadeia de caracteres que especifica uma definição de regra. Use `Allow` ou `Deny` para permitir ou negar operações sobre o recurso.
* Principal - Uma cadeia de caracteres que identifica exclusivamente a classe do usuário. Use `*` para corresponder a qualquer usuário.
* Comment - Uma cadeia de caracteres definida pelo usuário que fornece mais informações sobre a declaração de política.
* ApiConditions - Um *objeto opcional* que define condições de regra avançadas, por exemplo, Criptografia e Cabeçalhos Assinados.

Você pode definir regras de segurança fortes para seu aplicativo modificando sua política para usar declarações de permissão mais detalhadas que permitem acesso somente pelas APIs que você usa no seu aplicativo.

O exemplo a seguir mostra como restringir a chamada `DeleteCharacterFromUser`:

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

## Exemplo de política de acesso à API

O exemplo de código a seguir mostra operações básicas com políticas. O código executa as seguintes ações:

* Recupera e registra a **Policy** existente.
* Atualiza a política.
* Recupera e registra a **Policy** existente novamente.

```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()));
}
```

A imagem abaixo mostra um exemplo da saída após o código ser executado pela primeira vez. Conforme mostrado, a política consiste em várias [Declarações de Permissão](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 Admin - Política Get-Update - Saída em C#" width="656" height="535" data-path="images/playfab/api-references/images/game-manager-admin-api-get-update-policy-csharp-output.png" />


## Related topics

- [Política de acesso à API no Game Manager](/pt-BR/services/playfab/live-service-management/gamemanager/api-access-page-doc.md)
- [Políticas de acesso](/pt-BR/services/xbox-services/fundamentals/s2s-auth-calls/custom-service-config/access-policies/index.md)
- [Visão geral das políticas de acesso](/pt-BR/services/xbox-services/fundamentals/s2s-auth-calls/custom-service-config/access-policies/live-access-policies-overview.md)
- [Configurando políticas de acesso pelo Partner Center](/pt-BR/services/xbox-services/fundamentals/s2s-auth-calls/custom-service-config/access-policies/config/live-access-policies-config-nav.md)
- [Configurando políticas de acesso no Partner Center](/pt-BR/services/xbox-services/fundamentals/s2s-auth-calls/custom-service-config/access-policies/config/live-access-policies-udc.md)
