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

# Stratégie d'accès aux API

> Décrit comment utiliser les stratégies d'accès aux API dans PlayFab.

La stratégie d'accès aux API contrôle l'accès aux ressources d'API. Il est parfois nécessaire pour un titre d'autoriser ou de refuser certaines API à partir du client de jeu, à des fins de lutte contre la tricherie ou pour d'autres raisons de sécurité. Vous pouvez contrôler l'accès à l'aide d'énoncés de stratégie pour spécifier un ensemble de règles d'accès qui sont appliquées dans des situations précises.

Cette rubrique traite de l'utilisation des stratégies d'autorisation d'API pour créer les règles appropriées.

Vous pouvez également gérer la stratégie d'accès aux API de votre titre directement dans Game Manager. Pour plus d'informations, consultez [Stratégie d'accès aux API dans Game Manager](/fr-CA/services/playfab/live-service-management/gamemanager/api-access-page-doc).

<Info>
  Ce guide traite de techniques avancées. Si elle est mal appliquée, cette fonctionnalité peut désactiver complètement l'accès client à votre titre.
</Info>

## Contrôle et structure des stratégies

Les titres utilisent les appels de l'API Admin de PlayFab pour récupérer et mettre à jour les stratégies d'accès. Les deux appels précis que vous utilisez pour définir la stratégie d'accès aux API sont [GetPolicy](xref:titleid.playfabapi.com.admin.authentication.getpolicy) et [UpdatePolicy](xref:titleid.playfabapi.com.admin.authentication.updatepolicy). Pour plus d'informations sur les appels de l'API Admin, consultez [Référence de l'API PlayFab](https://learn.microsoft.com/en-us/rest/api/services/services/playfab/admin/).

Pour utiliser l'API Admin, vous devez fournir la clé secrète de développeur associée à votre titre. La clé de développeur sert à autoriser votre titre à effectuer des appels à l'API Admin. Pour obtenir des informations sur la récupération de votre clé secrète, consultez [Gestion des clés secrètes](/fr-CA/services/playfab/live-service-management/gamemanager/secret-key-management).

Chaque stratégie contient une liste d'énoncés, qui agissent comme des règles pour une ou plusieurs ressources PlayFab. PlayFab définit un ensemble par défaut d'énoncés de stratégie qui autorise toutes les stratégies. Si vous supprimez cet ensemble d'énoncés de stratégie sans le remplacer, votre titre ne pourra pas appeler les API client.

Les énoncés de stratégie PlayFab par défaut :

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

Chaque ensemble d'énoncés d'autorisation se compose des éléments suivants, tels que définis dans [Authentication - Update Policy](xref:titleid.playfabapi.com.admin.authentication.updatepolicy#permissionstatement) :

* Resource - Une chaîne qui identifie de manière unique une ou plusieurs ressources PlayFab. Pour décrire la ressource d'API, utilisez la convention illustrée ci-dessous. `pfrn:api--/API-GROUP/API-CALL` Spécifiez l'API client comme `API-GROUP` : `Client`, `Server` ou `Admin`. Remplacez `API-CALL` par un nom d'API comme `ConfirmPurchase`, `LoginWithTwitch` ou `ReportPlayer`. Une chaîne de ressource prend en charge les caractères génériques. La chaîne de ressource suivante correspond à n'importe quelle ressource. `pfrn:api--*`
* Action - Une chaîne qui décrit une opération à effectuer sur la ressource. Utilisez `*` pour correspondre à n'importe quelle opération.
* Effect - Une chaîne qui spécifie une définition de règle. Utilisez `Allow` ou `Deny` pour autoriser ou refuser les opérations sur la ressource.
* Principal - Une chaîne qui identifie de manière unique la classe de l'utilisateur. Utilisez `*` pour correspondre à n'importe quel utilisateur.
* Comment - Une chaîne définie par l'utilisateur qui fournit plus d'informations sur l'énoncé de stratégie.
* ApiConditions - Un *objet facultatif* qui définit des conditions de règle avancées, par exemple le chiffrement et les en-têtes signés.

Vous pouvez définir des règles de sécurité strictes pour votre application en modifiant votre stratégie afin d'utiliser des énoncés d'autorisation plus détaillés qui permettent uniquement l'accès aux API que vous utilisez dans votre application.

L'exemple suivant montre comment restreindre l'appel `DeleteCharacterFromUser` :

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

## Exemple de stratégie d'accès aux API

L'exemple de code suivant montre des opérations de base avec les stratégies. Le code effectue les actions suivantes :

* Récupère et journalise la **stratégie** existante.
* Met à jour la stratégie.
* Récupère et journalise de nouveau la **stratégie** existante.

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

L'image ci-dessous montre un exemple de la sortie après la première exécution du code. Comme on peut le voir, la stratégie se compose de plusieurs [énoncés d'autorisation](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 - Stratégie Get-Update - Sortie C#" width="656" height="535" data-path="images/playfab/api-references/images/game-manager-admin-api-get-update-policy-csharp-output.png" />


## Related topics

- [Stratégie d'accès aux API dans Game Manager](/fr-CA/services/playfab/live-service-management/gamemanager/api-access-page-doc.md)
- [Notions de base de PlayFab](/fr-CA/services/playfab/get-started/index.md)
- [Authentification Microsoft Entra ID pour les API PlayFab](/fr-CA/services/playfab/identity/dev-identity/authentication/entra-id-api-authentication.md)
- [Utilisation des statistiques des joueurs](/fr-CA/services/playfab/community/leaderboards/tournaments-leaderboards/using-player-statistics.md)
- [Utilisation des données de groupe partagées](/fr-CA/services/playfab/community/associations/groups/using-shared-group-data.md)
