

AWS Le service de modernisation du mainframe (expérience de l'environnement d'exécution géré) n'est plus ouvert aux nouveaux clients. Pour des fonctionnalités similaires au service de modernisation AWS du mainframe (expérience de l'environnement d'exécution géré), explorez le service de modernisation AWS du mainframe (expérience autogérée). Les clients existants peuvent continuer à utiliser le service normalement. Pour plus d'informations, consultez la section [Modification de la disponibilité de la modernisation du AWS mainframe](https://docs.aws.amazon.com/m2/latest/userguide/mainframe-modernization-availability-change.html).

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Configuration de la sécurité pour les applications Gapwalk
<a name="ba-runtime-security"></a>

Les rubriques suivantes décrivent comment sécuriser les applications Gapwalk.

Il est de votre responsabilité de fournir la bonne configuration pour garantir la sécurité de l'utilisation du framework AWS Transform for mainframe.

Toutes les fonctionnalités liées à la sécurité sont désactivées par défaut. Pour activer l'authentification (et CSRF, XSS, CSP, etc.), définissez `gapwalk-application.security` sur et sur. `enabled` `gapwalk-application.security.identity` `oauth`

**Topics**
+ [Configurer l'accessibilité des URI pour les applications Gapwalk](ba-runtime-filteringURIs.md)
+ [Configurer l'authentification pour les applications Gapwalk](ba-runtime-auth.md)
+ [Configurer la limitation du débit pour AWS Transform for mainframe Runtime](ba-runtime-rate-limiting.md)

# Configurer l'accessibilité des URI pour les applications Gapwalk
<a name="ba-runtime-filteringURIs"></a>

Cette rubrique décrit comment configurer le filtrage URIs des applications Gapwalk. Cette fonctionnalité ne nécessite pas de fournisseur d'identité (IdP).

Pour bloquer une liste de URIs, ajoutez les deux lignes suivantes à celle `application-main.yml` de votre application modernisée*URI-1*, en remplaçant*URI-2*, etc., par celle URIs que vous souhaitez bloquer.

```
gapwalk-application.security.filterURIs: enabled
gapwalk-application.security.blockedURIs: URI-1, URI-2, URI-3
```

# Configurer l'authentification pour les applications Gapwalk
<a name="ba-runtime-auth"></a>

Pour configurer OAuth2 l'authentification pour votre application Gapwalk, vous devez configurer un fournisseur d'identité (IdP) et l'intégrer à votre application. Ce guide décrit les étapes à suivre pour utiliser Amazon Cognito ou Keycloak comme IdP. Avec Amazon Cognito, vous pouvez mettre à jour le fichier de configuration de votre application avec les détails du groupe d'utilisateurs Cognito. Avec Keycloak, vous pouvez contrôler l'accès à votre application APIs et à vos ressources en fonction des rôles assignés à l'utilisateur.

**Topics**
+ [Configurer l' OAuth2 authentification Gapwalk avec Amazon Cognito](ba-runtime-auth-cognito.md)
+ [Configurer l' OAuth2 authentification Gapwalk avec Keycloak](ba-runtime-auth-keycloak.md)

# Configurer l' OAuth2 authentification Gapwalk avec Amazon Cognito
<a name="ba-runtime-auth-cognito"></a>

Cette rubrique explique comment configurer l' OAuth2 authentification pour les applications Gapwalk utilisant Amazon Cognito en tant que fournisseur d'identité (IdP).

## Conditions préalables
<a name="ba-runtime-auth-cognito-prereq"></a>

Dans ce didacticiel, nous utiliserons Amazon Cognito comme IdP et PlanetDemo comme projet modernisé.

Vous pouvez utiliser n'importe quel autre fournisseur d'identité externe. Les ClientRegistration informations doivent être obtenues auprès de votre IdP et sont requises pour l'authentification Gapwalk. Pour plus d'informations, consultez le [Guide du développeur Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/).

**Les ClientRegistration informations :**

identificateur du client  
ID du ClientRegistration. Dans notre exemple, ce sera le cas PlanetsDemo.

client-secret  
Le secret de votre client.

point final d'autorisation  
L'URI du point de terminaison d'autorisation pour le serveur d'autorisation.

point de terminaison symbolique  
L'URI du point de terminaison du jeton pour le serveur d'autorisation.

point de terminaison jwks  
L'URI utilisé pour obtenir la clé Web JSON (JWK) qui contient les clés permettant de valider la signature Web JSON émise par le serveur d'autorisation.

URI de redirection  
L'URI vers lequel le serveur d'autorisation redirige l'utilisateur final si l'accès est accordé.

## Configuration d'Amazon Cognito
<a name="cog-setup"></a>

Nous allons d'abord créer et configurer un groupe d'utilisateurs et un utilisateur Amazon Cognito que nous utiliserons avec notre application Gapwalk déployée à des fins de test.

**Note**  
Si vous utilisez un autre IdP, vous pouvez ignorer cette étape.

**Création d'un groupe d'utilisateurs**

1. Accédez à Amazon Cognito dans le AWS Management Console et authentifiez-vous à l'aide de vos informations d'identification. AWS 

1. Choisissez **Groupes d’utilisateurs**.

1. Sélectionnez **Create a user pool**.

1. Dans **Configurer l'expérience de connexion**, conservez le type de fournisseur par défaut du groupe **d'utilisateurs Cognito**. **Vous pouvez choisir une ou plusieurs **options de connexion au groupe d'utilisateurs de Cognito** ; pour l'instant, choisissez **Nom d'utilisateur**, puis Suivant.**  
![\[alt_text\]](http://docs.aws.amazon.com/fr_fr/m2/latest/userguide/images/cog-auth-provider.png)

1. **Dans **Configurer les exigences de sécurité**, conservez les valeurs par défaut et désactivez l'**authentification multifactorielle** en choisissant Pas de **MFA**, puis en choisissant Suivant.**  
![\[alt_text\]](http://docs.aws.amazon.com/fr_fr/m2/latest/userguide/images/cog-sec-requirements.png)

1. Par mesure de sécurité, désactivez **Activer l'enregistrement automatique**, puis choisissez **Suivant**.  
![\[alt_text\]](http://docs.aws.amazon.com/fr_fr/m2/latest/userguide/images/cog-config-sign-up.png)

1. **Choisissez **Envoyer un e-mail avec Cognito**, puis cliquez sur Suivant.**  
![\[alt_text\]](http://docs.aws.amazon.com/fr_fr/m2/latest/userguide/images/cog-email.png)

1. Dans **Intégrer votre application**, spécifiez le nom de votre groupe d'utilisateurs. Dans les **pages d'authentification hébergées**, choisissez **Utiliser l'interface utilisateur hébergée de Cognito**.  
![\[alt_text\]](http://docs.aws.amazon.com/fr_fr/m2/latest/userguide/images/cog-domain.png)

1. Pour plus de simplicité, dans **Domaine**, choisissez **Utiliser un domaine Cognito** et entrez un préfixe de domaine, par exemple,. `https://planetsdemo` L'application de démonstration doit être ajoutée en tant que client.

   1. Dans **Client d'application initial**, sélectionnez **Client confidentiel**. Entrez un nom de client d'application, tel que**planetsdemo**, puis choisissez **Generate a client secret**.

   1. Dans **URL de rappel autorisée**, entrez l'URL vers laquelle rediriger l'utilisateur après l'authentification. L'URL doit se terminer par`/login/oauth2/code/cognito`. Par exemple, pour nos applications d'application et de backend Gapwalk et BAC :

      ```
      http://localhost:8080/bac
            http://localhost:8080/bac/login/oauth2/code/cognito
            http://localhost:8080/gapwalk-application
            http://localhost:8080/gapwalk-application/login/oauth2/code/cognito
            http://localhost:8080/planetsdemo
            http://localhost:8080/planetsdemo/login/oauth2/code/cognito
      ```

      Vous pourrez modifier l'URL ultérieurement.  
![\[alt_text\]](http://docs.aws.amazon.com/fr_fr/m2/latest/userguide/images/cog-urls.png)

   1. Dans **Déconnexion autorisée, URLs** entrez l'URL de la page de déconnexion vers laquelle vous souhaitez qu'Amazon Cognito redirige lorsque votre application déconnecte les utilisateurs. Par exemple, pour les applications principales Gapwalk et BAC :

      ```
      http://localhost:8080/bac/logout
      http://localhost:8080/gapwalk-application/logout
      http://localhost:8080/planetsdemo/logout
      ```

      Vous pourrez modifier l'URL ultérieurement.

   1. Conservez les valeurs par défaut dans les sections **Paramètres avancés du client de l'application** et **Autorisations de lecture et d'écriture des attributs**.

   1. Choisissez **Suivant**.

1. Dans **Révision et création**, vérifiez vos choix, puis choisissez **Créer un groupe d'utilisateurs**.

Pour plus d'informations, voir [Création d'un groupe d'utilisateurs](https://docs.aws.amazon.com/cognito/latest/developerguide/tutorial-create-user-pool.html).

**Création d'utilisateurs**

L'enregistrement automatique étant désactivé, créez un utilisateur Amazon Cognito. Accédez à Amazon Cognito dans le. AWS Management Console Choisissez le groupe d'utilisateurs que vous avez créé, puis dans **Utilisateurs**, choisissez **Créer un utilisateur**.

Dans **Informations utilisateur**, choisissez **Envoyer une invitation par e-mail**, entrez un nom d'utilisateur et une adresse e-mail, puis choisissez **Générer un mot de passe**. Choisissez **Create user (Créer un utilisateur)**.

**Création de rôles**

Dans l'onglet **Groupes**, créez 3 groupes (SUPER\$1ADMIN, ADMIN et USER) et associez votre utilisateur à un ou plusieurs de ces groupes. Ces rôles sont ensuite mappés à ROLE\$1SUPER\$1ADMIN, ROLE\$1ADMIN et ROLE\$1USER par l'application Gapwalk pour permettre l'accès à certains appels REST d'API restreints.

L'application implémente un scope-to-role mappage hiérarchique qui fonctionne avec plusieurs fournisseurs OAuth2 d'identité. Lorsque les jetons JWT émis par Cognito sont utilisés pour l'autorisation du serveur de ressources, les étendues définies dans le jeton sont automatiquement mappées aux rôles correspondants.

## Intégrer Amazon Cognito dans l'application Gapwalk
<a name="integrate-cognito"></a>

Maintenant que votre groupe d'utilisateurs et vos utilisateurs Amazon Cognito sont prêts, accédez au `application-main.yml` fichier de votre application modernisée et ajoutez le code suivant :

```
gapwalk-application.security: enabled
gapwalk-application.security.identity: oauth
gapwalk-application.security.issuerUri: https://cognito-idp.<region-id>.amazonaws.com/<pool-id>
gapwalk-application.security.domainName: <your-cognito-domain>

spring:
  security:
    oauth2:
      client:
        registration:
          cognito:
            client-id: <client-id>
            client-name: <client-name>
            client-secret: <client-secret>
            provider: cognito
            authorization-grant-type: authorization_code
            scope: openid
            redirect-uri: "<redirect-uri>"
        provider:
          cognito:
            issuer-uri: ${gapwalk-application.security.issuerUri}
            authorization-uri: ${gapwalk-application.security.domainName}/oauth2/authorize
            jwk-set-uri: ${gapwalk-application.security.issuerUri}/.well-known/jwks.json
            token-uri: ${gapwalk-application.security.domainName}/oauth2/token
            user-name-attribute: username
      resourceserver:
        jwt:
          jwk-set-uri: ${gapwalk-application.security.issuerUri}/.well-known/jwks.json
```

Remplacez les espaces réservés suivants comme décrit :

1. Accédez à Amazon Cognito dans le AWS Management Console et authentifiez-vous à l'aide de vos informations d'identification. AWS 

1. Choisissez **Groupes d'utilisateurs** et choisissez le groupe d'utilisateurs que vous avez créé. Vous pouvez trouver votre **identifiant *pool-id* dans le groupe d'utilisateurs**.

1. Choisissez **Intégration d'applications** où vous pouvez trouver votre*your-cognito-domain*, puis accédez à **Clients d'applications et analyses** et choisissez votre application.

1. Dans **App client : YourApp**, vous pouvez trouver le *client-name**client-id*, et *client-secret* (**Afficher le secret du client**).

1. *region-id*correspond à l'ID de AWS région dans lequel vous avez créé votre utilisateur et votre groupe d'utilisateurs Amazon Cognito. Exemple: `eu-west-3`.

1. Pour *redirect-uri* saisir l'URI que vous avez spécifié pour l'**URL de rappel autorisée**. Dans notre exemple, c'est le cas`http://localhost:8080/planetsdemo/login/oauth2/code/cognito`.

Vous pouvez désormais déployer votre application Gapwalk et utiliser l'utilisateur créé précédemment pour vous connecter à votre application.

# Configurer l' OAuth2 authentification Gapwalk avec Keycloak
<a name="ba-runtime-auth-keycloak"></a>

Cette rubrique décrit comment configurer l' OAuth2 authentification pour les applications Gapwalk utilisant Keycloak comme fournisseur d'identité (IdP). Dans ce tutoriel, nous utilisons Keycloak 24.0.0.

## Conditions préalables
<a name="ba-runtime-auth-keycloak-prereq"></a>
+ [Cape à clés](https://www.keycloak.org/)
+ Application Gapwalk

## Configuration de Keycloak
<a name="keycloak-setup"></a>

1. Accédez à votre tableau de bord Keycloak dans votre navigateur Web. Les informations d'identification par défaut sont admin/admin. Accédez à la barre de navigation en haut à gauche et créez un domaine portant le nom**demo**, comme indiqué dans l'image suivante.  
![\[alt_text\]](http://docs.aws.amazon.com/fr_fr/m2/latest/userguide/images/ba-runtime-auth-keycloak_2.png)

1. Créez un client portant ce nom**app-demo**.  
![\[User interface for creating a new client in an authentication management system.\]](http://docs.aws.amazon.com/fr_fr/m2/latest/userguide/images/ba-runtime-auth-keycloak_3.jpg)

   Remplacez `localhost:8080` par l'adresse de votre application Gapwalk  
![\[alt_text\]](http://docs.aws.amazon.com/fr_fr/m2/latest/userguide/images/ba-runtime-auth-keycloak_4.png)  
![\[alt_text\]](http://docs.aws.amazon.com/fr_fr/m2/latest/userguide/images/ba-runtime-auth-keycloak_5.png)

1. **Pour obtenir le secret de votre client, choisissez **Clients**, **app-demo**, puis Credentials.**  
![\[alt_text\]](http://docs.aws.amazon.com/fr_fr/m2/latest/userguide/images/ba-runtime-auth-keycloak_6.jpg)

1. Choisissez **Clients**, puis Étendue **du client, puis** **Ajouter un mappeur prédéfini**. Choisissez les **rôles du domaine**.  
![\[alt_text\]](http://docs.aws.amazon.com/fr_fr/m2/latest/userguide/images/ba-runtime-auth-keycloak_7.jpg)

1. Modifiez votre rôle de domaine avec la configuration illustrée dans l'image suivante.  
![\[alt_text\]](http://docs.aws.amazon.com/fr_fr/m2/latest/userguide/images/ba-runtime-auth-keycloak_8.jpg)

1. N'oubliez pas le **nom de demande de jeton** défini. Vous aurez besoin de cette valeur dans la définition des paramètres Gapwalk de la `gapwalk-application.security.claimGroupName` propriété.  
![\[alt_text\]](http://docs.aws.amazon.com/fr_fr/m2/latest/userguide/images/ba-runtime-auth-keycloak_9.jpg)

1. Choisissez **les rôles Realms**, puis créez 3 rôles : **SUPER\$1ADMIN****ADMIN**, et**USER**. Ces rôles sont ensuite mappés à `ROLE_SUPER_ADMIN``ROLE_ADMIN`, et `ROLE_USER` par l'application Gapwalk pour pouvoir accéder à certains appels REST d'API restreints.  
![\[alt_text\]](http://docs.aws.amazon.com/fr_fr/m2/latest/userguide/images/ba-runtime-auth-keycloak_10.jpg)

## Intégrez Keycloak dans l'application Gapwalk
<a name="gapwalk-setup"></a>

Modifiez votre `application-main.yml` comme suit :

```
gapwalk-application.security: enabled
gapwalk-application.security.identity: oauth
gapwalk-application.security.issuerUri: http://<KEYCLOAK_SERVER_HOSTNAME>/realms/<YOUR_REALM_NAME>
gapwalk-application.security.claimGroupName: "keycloak:groups"

gapwalk-application.security.userAttributeName: "preferred_username"
# Use "username" for cognito, 
#     "preferred_username" for keycloak
#      or any other string

spring:
  security:
    oauth2:
      client:
        registration:
          demo:
            client-id: <YOUR_CLIENT_ID>
            client-name: Demo App
            client-secret: <YOUR_CLIENT_SECRET>
            provider: keycloak
            authorization-grant-type: authorization_code
            scope: openid
            redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}"
        provider:
          keycloak:
            issuer-uri: ${gapwalk-application.security.issuerUri}
            authorization-uri: ${gapwalk-application.security.issuerUri}/protocol/openid-connect/auth
            jwk-set-uri: ${gapwalk-application.security.issuerUri}/protocol/openid-connect/certs
            token-uri: ${gapwalk-application.security.issuerUri}/protocol/openid-connect/token
            user-name-attribute: ${gapwalk-application.security.userAttributeName}
      resourceserver:
        jwt:
          jwk-set-uri: ${gapwalk-application.security.issuerUri}/protocol/openid-connect/certs
```

Remplacez*<KEYCLOAK\$1SERVER\$1HOSTNAME>*, *<YOUR\$1REALM\$1NAME>**<YOUR\$1CLIENT\$1ID>*, et par le nom *<YOUR\$1CLIENT\$1SECRET>* d'hôte de votre serveur Keycloak, votre nom de domaine, votre identifiant client et votre secret client.

# Configurer la limitation du débit pour AWS Transform for mainframe Runtime
<a name="ba-runtime-rate-limiting"></a>

AWS Transform for mainframe Runtime inclut une fonctionnalité intégrée de limitation de débit pour protéger les applications Gapwalk contre les demandes excessives et les abus potentiels. Le système de limitation de débit utilise l'algorithme Token Bucket pour fournir à la fois une capacité de rafale et une limitation de débit soutenue.

**Topics**
+ [Vue d'ensemble des limites de débit](#ba-runtime-rate-limiting-overview)
+ [Propriétés de configuration](#ba-runtime-rate-limiting-config)
+ [Activer la limitation du débit](#ba-runtime-rate-limiting-enable)
+ [Identification du client](#ba-runtime-rate-limiting-client-id)
+ [En-têtes de limite de débit](#ba-runtime-rate-limiting-headers)
+ [Gestion de mémoire](#ba-runtime-rate-limiting-memory)

## Vue d'ensemble des limites de débit
<a name="ba-runtime-rate-limiting-overview"></a>

Le système de limitation de débit fournit les fonctionnalités suivantes :

**Algorithme Token Bucket**  
+ Autorise le trafic en rafale jusqu'à la capacité de rafale configurée
+ Recharge les jetons à un rythme constant en fonction des demandes par minute
+ Permet de limiter le débit en douceur sans bloquer les pics de trafic légitimes

**Identification du client**  
+ Identifie les clients par adresse IP avec support proxy
+ Supports X-Forwarded-For et X-Real-IP en-têtes
+ Gère les scénarios d'équilibrage de charge et de proxy inverse

**Automatic Memory Management**  
+ Nettoie automatiquement les compartiments de limites de débit expirés
+ Intervalles de nettoyage et délais d'expiration configurables
+ Empêche les fuites de mémoire dans les applications de longue durée

**Intégration HTTP**  
+ Renvoie HTTP 429 (trop de demandes) lorsque les limites sont dépassées
+ Inclut les en-têtes de limite de débit standard dans les réponses
+ Fournit des informations sur les réessais aux clients

## Propriétés de configuration
<a name="ba-runtime-rate-limiting-config"></a>

Configurez la limitation de débit dans votre `application-main.yaml` fichier :

```
gapwalk:
  ratelimiting:
    enabled: true                                        # Enable/disable rate limiting
    requestsPerMinute: 1000                              # Sustained rate limit per minute
    burstCapacity: 1500                                  # Maximum burst requests allowed
    includeHeaders: true                                 # Include X-RateLimit-* headers
    cleanupIntervalMinutes: 5                            # Cleanup interval for expired buckets
    bucketExpiryHours: 1                                 # Hours after which unused buckets expire
    errorMessage: "Too many requests. Try again later."  # Custom error message
    whitelistIps: ""                                     # Comma-separated IPs to bypass limiting
    perEndpointLimiting: false                           # Apply limits per endpoint (not implemented)
```

### Descriptions des propriétés
<a name="ba-runtime-rate-limiting-config-properties"></a>

**activé**  
Interrupteur principal pour activer ou désactiver la fonctionnalité de limitation de débit. Valeur par défaut : `false`

**requestsPerMinute**  
Nombre de demandes autorisées par minute pour une limitation durable du débit. Cela représente le taux de recharge des jetons. Valeur par défaut : `1000`

**Capacité d'éclatement**  
Nombre maximum de demandes autorisées par rafale avant que la limite de débit ne s'applique. Devrait être supérieur `requestsPerMinute` à celui prévu pour permettre des pics de trafic. Valeur par défaut : `1500`

**Inclure les en-têtes**  
S'il faut inclure les en-têtes de limite de débit standard (`X-RateLimit-Limit`,`X-RateLimit-Remaining`,`X-RateLimit-Reset`) dans les réponses HTTP. Valeur par défaut : `true`

**cleanupIntervalMinutes**  
Intervalle en minutes entre le nettoyage automatique des compartiments de limites de débit expirés. Aide à prévenir les fuites de mémoire. Valeur par défaut : `5`

**bucketExpiryHours**  
Durée en heures après laquelle les compartiments de limite de débit non utilisés sont considérés comme expirés et éligibles au nettoyage. Valeur par défaut : `1`

**errorMessage**  
Message d'erreur personnalisé renvoyé dans la réponse JSON lorsque la limite de débit est dépassée. Valeur par défaut : `"Too many requests. Try again later."`

**Conseils sur les listes blanches**  
Liste d'adresses IP séparées par des virgules qui contournent totalement la limitation de débit. Utile pour les bilans de santé ou les systèmes fiables. Valeur par défaut : `empty`

**perEndpointLimiting**  
S'il faut appliquer des limites de débit distinctes par point de terminaison plutôt que par client uniquement. Non implémenté actuellement. Valeur par défaut : `false`

## Activer la limitation du débit
<a name="ba-runtime-rate-limiting-enable"></a>

Pour activer la limitation du débit avec les paramètres par défaut :

```
gapwalk:
  ratelimiting:
    enabled: true
```

## Identification du client
<a name="ba-runtime-rate-limiting-client-id"></a>

Le système de limitation du débit identifie les clients selon l'ordre de priorité suivant :

1. **X-Forwarded-For en-tête** (première adresse IP si elle est séparée par des virgules)

1. **X-Real-IP en-tête**

1. **Adresse distante** depuis la requête HTTP

Cela garantit une identification correcte du client lorsque l'application est en retard :
+ Équilibreurs de charge
+ Proxies inverses
+ CDNs
+ Passerelles API

### Exemple d'identification du client
<a name="ba-runtime-rate-limiting-client-id-example"></a>

```
# Direct connection
Client IP: 192.168.1.100

# Behind load balancer with X-Forwarded-For
X-Forwarded-For: 203.0.113.45, 192.168.1.100
Client IP: 203.0.113.45 (first IP used)

# Behind reverse proxy with X-Real-IP
X-Real-IP: 203.0.113.45
Client IP: 203.0.113.45
```

## En-têtes de limite de débit
<a name="ba-runtime-rate-limiting-headers"></a>

Lorsque cette option `includeHeaders` est activée, les en-têtes suivants sont ajoutés aux réponses HTTP :

**Limite X RateLimit -**  
Le plafond tarifaire pour le client (demandes par minute)

**X- RateLimit -Restant**  
Le nombre de demandes restantes dans la fenêtre de limite de débit actuelle

**X- RateLimit -Réinitialiser**  
Heure à laquelle la fenêtre de limite de débit est réinitialisée (horodatage Unix)

### Exemples d'en-têtes de réponse
<a name="ba-runtime-rate-limiting-headers-example"></a>

```
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 847
X-RateLimit-Reset: 1640995200
```

### Réponse dépassée la limite de débit
<a name="ba-runtime-rate-limiting-headers-exceeded"></a>

Lorsque la limite de débit est dépassée, le système renvoie :

**État du protocole HTTP**  
429 Trop de demandes

**Content-Type**  
application/json

**Réessayer-après**  
Nombre de secondes à attendre avant de réessayer

```
{
  "error": "Rate limit exceeded",
  "message": "Too many requests. Try again later.",
  "retryAfter": 60,
  "timestamp": 1640995140000
}
```

## Gestion de mémoire
<a name="ba-runtime-rate-limiting-memory"></a>

Le système de limitation de débit gère automatiquement la mémoire pour éviter les fuites dans les applications de longue durée :

**Nettoyage automatique**  
+ Fonctionne toutes les `cleanupIntervalMinutes` minutes
+ Supprime les seaux inutilisés pendant des heures `bucketExpiryHours`
+ Enregistre les activités de nettoyage à des fins de surveillance

**Efficacité de la mémoire**  
+ Utilise des structures de données concurrentes pour la sécurité des threads
+ Création d'un bucket Lazy (uniquement en cas de besoin)
+ Implémentation efficace d'un token bucket

### Surveillance de l'activité de nettoyage
<a name="ba-runtime-rate-limiting-memory-monitoring"></a>

Vérifiez les journaux pour détecter les messages de nettoyage :

```
INFO  RateLimitingService - Cleaned up 15 expired rate limiting buckets
```