

AWS Der Mainframe Modernization Service (Managed Runtime Environment Experience) steht Neukunden nicht mehr zur Verfügung. Funktionen, die dem AWS Mainframe Modernization Service (Managed Runtime Environment-Erfahrung) ähneln, finden Sie unter AWS Mainframe Modernization Service (Self-Managed Experience). Bestandskunden können den Service weiterhin wie gewohnt nutzen. Weitere Informationen finden Sie unter Änderung der Verfügbarkeit von [AWS Mainframe Modernization](https://docs.aws.amazon.com/m2/latest/userguide/mainframe-modernization-availability-change.html).

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Konfigurieren Sie die Sicherheit für Gapwalk-Anwendungen
<a name="ba-runtime-security"></a>

In den folgenden Themen wird beschrieben, wie Gapwalk-Anwendungen gesichert werden.

Es liegt in Ihrer Verantwortung, die richtige Konfiguration bereitzustellen, um sicherzustellen, dass die Verwendung des AWS Transform for Mainframe-Frameworks sicher ist.

Alle sicherheitsrelevanten Funktionen sind standardmäßig deaktiviert. Um die Authentifizierung (und CSRF, XSS, CSP usw.) zu aktivieren, stellen Sie auf und auf ein. `gapwalk-application.security` `enabled` `gapwalk-application.security.identity` `oauth`

**Topics**
+ [URI-Zugänglichkeit für Gapwalk-Anwendungen konfigurieren](ba-runtime-filteringURIs.md)
+ [Konfigurieren Sie die Authentifizierung für Gapwalk-Anwendungen](ba-runtime-auth.md)
+ [Ratenbegrenzung für AWS Transform for Mainframe Runtime konfigurieren](ba-runtime-rate-limiting.md)

# URI-Zugänglichkeit für Gapwalk-Anwendungen konfigurieren
<a name="ba-runtime-filteringURIs"></a>

In diesem Thema wird beschrieben, wie Sie die Filterung URIs für Gapwalk-Anwendungen konfigurieren. Für diese Funktion ist kein Identitätsanbieter (IdP) erforderlich.

Um eine Liste von zu blockieren URIs, fügen Sie `application-main.yml` der Ihrer modernisierten Anwendung die folgenden beiden Zeilen hinzu und ersetzen Sie *URI-1* dabei*URI-2*, usw., durch die Zeile, URIs die Sie blockieren möchten.

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

# Konfigurieren Sie die Authentifizierung für Gapwalk-Anwendungen
<a name="ba-runtime-auth"></a>

Um die OAuth2 Authentifizierung für Ihre Gapwalk-Anwendung zu konfigurieren, müssen Sie einen Identitätsanbieter (IdP) einrichten und ihn in Ihre Anwendung integrieren. Dieses Handbuch behandelt die Schritte zur Verwendung von Amazon Cognito oder Keycloak als IdP. Mit Amazon Cognito können Sie die Konfigurationsdatei Ihrer Anwendung mit den Cognito-Benutzerpooldetails aktualisieren. Mit Keycloak können Sie den Zugriff auf Ihre Anwendung APIs und Ressourcen auf der Grundlage der dem Benutzer zugewiesenen Rollen steuern.

**Topics**
+ [OAuth2 Gapwalk-Authentifizierung mit Amazon Cognito konfigurieren](ba-runtime-auth-cognito.md)
+ [Konfigurieren Sie die Gapwalk-Authentifizierung OAuth2 mit Keycloak](ba-runtime-auth-keycloak.md)

# OAuth2 Gapwalk-Authentifizierung mit Amazon Cognito konfigurieren
<a name="ba-runtime-auth-cognito"></a>

In diesem Thema wird beschrieben, wie die OAuth2 Authentifizierung für Gapwalk-Anwendungen mit Amazon Cognito als Identitätsanbieter (IdP) konfiguriert wird.

## Voraussetzungen
<a name="ba-runtime-auth-cognito-prereq"></a>

In diesem Tutorial werden wir Amazon Cognito als IdP und PlanetDemo als modernisiertes Projekt verwenden.

Sie können jeden anderen externen Identitätsanbieter verwenden. Die ClientRegistration Informationen müssen von Ihrem IdP bezogen werden und sind für die Gapwalk-Authentifizierung erforderlich. Weitere Informationen finden Sie im [Amazon Cognito Entwicklerhandbuch](https://docs.aws.amazon.com/cognito/latest/developerguide/).

**Die Informationen: ClientRegistration **

Kunden-ID  
Die ID der ClientRegistration. In unserem Beispiel wird es so sein. PlanetsDemo

Kundengeheimnis  
Das Geheimnis Ihres Kunden.

Endpunkt der Autorisierung  
Der Autorisierungsendpunkt-URI für den Autorisierungsserver.

Token-Endpunkt  
Der Token-Endpunkt-URI für den Autorisierungsserver.

Jwks-Endpunkt  
Der URI, der zum Abrufen des JSON-Webschlüssels (JWK) verwendet wird, der die Schlüssel für die Validierung der vom Autorisierungsserver ausgestellten JSON-Websignatur enthält.

URI umleiten  
Der URI, zu dem der Autorisierungsserver den Endbenutzer weiterleitet, wenn der Zugriff gewährt wird.

## Einrichtung von Amazon Cognito
<a name="cog-setup"></a>

Zunächst erstellen und konfigurieren wir einen Amazon Cognito Cognito-Benutzerpool und einen Benutzer, die wir mit unserer bereitgestellten Gapwalk-Anwendung zu Testzwecken verwenden werden.

**Anmerkung**  
Wenn Sie einen anderen IdP verwenden, können Sie diesen Schritt überspringen.

**Benutzerpool erstellen**

1. Gehen Sie zu Amazon Cognito in AWS-Managementkonsole und authentifizieren Sie sich mit Ihren AWS Anmeldeinformationen.

1. Wählen Sie **User Pools** (Benutzerpools) aus.

1. Wählen Sie **Create a user pool**.

1. Behalten **Sie unter Anmeldeerlebnis konfigurieren** den Standardanbietertyp für den **Cognito-Benutzerpool** bei. **Sie können eine oder mehrere **Anmeldeoptionen für den Cognito-Benutzerpool** auswählen. Wählen Sie zunächst **Benutzername** und dann Weiter.**  
![\[alt_text\]](http://docs.aws.amazon.com/de_de/m2/latest/userguide/images/cog-auth-provider.png)

1. **Behalten **Sie unter Sicherheitsanforderungen konfigurieren** die Standardeinstellungen bei und deaktivieren Sie die **Multi-Faktor-Authentifizierung**, indem Sie **Kein MFA** und dann Weiter auswählen.**  
![\[alt_text\]](http://docs.aws.amazon.com/de_de/m2/latest/userguide/images/cog-sec-requirements.png)

1. **Deaktivieren Sie aus Sicherheitsgründen die Option **Selbstregistrierung aktivieren** und wählen Sie dann Weiter aus.**  
![\[alt_text\]](http://docs.aws.amazon.com/de_de/m2/latest/userguide/images/cog-config-sign-up.png)

1. Wählen Sie **E-Mail mit Cognito** senden und dann **Weiter**.  
![\[alt_text\]](http://docs.aws.amazon.com/de_de/m2/latest/userguide/images/cog-email.png)

1. Geben **Sie unter Integrieren Sie Ihre App** einen Namen für Ihren Benutzerpool an. Wählen Sie unter **Gehostete Authentifizierungsseiten** die Option **Die von Cognito gehostete Benutzeroberfläche verwenden** aus.  
![\[alt_text\]](http://docs.aws.amazon.com/de_de/m2/latest/userguide/images/cog-domain.png)

1. Der Einfachheit halber wählen Sie **unter Domain** die Option **Eine Cognito-Domäne verwenden** aus und geben Sie ein Domainpräfix ein, `https://planetsdemo` z. B. Die Demo-App muss als Client hinzugefügt werden.

   1. Wählen Sie unter **Anfänglicher App-Client** die Option **Vertraulicher Client** aus. Geben Sie einen App-Clientnamen ein, z. B.**planetsdemo**, und wählen Sie dann **Generate a Client Secret** aus.

   1. Geben Sie im Feld **Zulässige Rückruf-URL** die URL ein, zu der der Benutzer nach der Authentifizierung weitergeleitet werden soll. Die URL muss mit `/login/oauth2/code/cognito` enden. Zum Beispiel für unsere Anwendung und Backend-Gapwalk- und BAC-Anwendungen:

      ```
      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
      ```

      Sie können die URL später bearbeiten.  
![\[alt_text\]](http://docs.aws.amazon.com/de_de/m2/latest/userguide/images/cog-urls.png)

   1.  URLsGeben Sie **unter Zulässige Abmeldung** die URL der Abmeldeseite ein, zu der Amazon Cognito weiterleiten soll, wenn Ihre Anwendung Benutzer abmeldet. Zum Beispiel für Backend-Anwendungen Gapwalk und BAC:

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

      Sie können die URL später bearbeiten.

   1. Behalten Sie die Standardwerte in den Abschnitten **Erweiterte App-Client-Einstellungen** und **Lese- und Schreibberechtigungen für Attribute** bei.

   1. Wählen Sie **Weiter** aus.

1. **Überprüfen Sie unter Überprüfen und erstellen** Ihre Auswahl und wählen Sie dann **Benutzerpool erstellen** aus.

Weitere Informationen finden Sie unter [Benutzerpool erstellen](https://docs.aws.amazon.com/cognito/latest/developerguide/tutorial-create-user-pool.html).

**Benutzererstellung**

Da die Selbstregistrierung deaktiviert ist, erstellen Sie einen Amazon Cognito Cognito-Benutzer. Navigieren Sie zu Amazon Cognito in der AWS-Managementkonsole. Wählen Sie den Benutzerpool aus, den Sie erstellt haben, und wählen Sie dann unter **Benutzer die** Option **Benutzer erstellen** aus.

Wählen Sie **unter Benutzerinformationen** die Option **E-Mail-Einladung senden** aus, geben Sie einen Benutzernamen und eine E-Mail-Adresse ein und wählen Sie **Passwort generieren** aus. Wählen Sie **Create user** (Benutzer erstellen) aus.

**Erstellung einer Rolle**

Erstellen Sie auf der Registerkarte **Gruppen** 3 Gruppen (SUPER\$1ADMIN, ADMIN und USER) und ordnen Sie Ihren Benutzer einer oder mehreren dieser Gruppen zu. Diese Rollen werden später von der Gapwalk-Anwendung ROLE\$1SUPER\$1ADMIN, ROLE\$1ADMIN und ROLE\$1USER zugeordnet, um den Zugriff auf einige eingeschränkte API-REST-Aufrufe zu ermöglichen.

Die Anwendung implementiert eine scope-to-role hierarchische OAuth2 Zuordnung, die mit mehreren Identitätsanbietern funktioniert. Wenn von Cognito ausgegebene JWT-Token für die Autorisierung von Ressourcenservern verwendet werden, werden die im Token definierten Bereiche automatisch den entsprechenden Rollen zugeordnet.

## Integrieren Sie Amazon Cognito in die Gapwalk-Anwendung
<a name="integrate-cognito"></a>

Nachdem Ihr Amazon Cognito Cognito-Benutzerpool und Ihre Benutzer bereit sind, gehen Sie in die `application-main.yml` Datei Ihrer modernisierten Anwendung und fügen Sie den folgenden Code hinzu:

```
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
```

Ersetzen Sie die folgenden Platzhalter wie beschrieben:

1. Gehen Sie zu Amazon Cognito in AWS-Managementkonsole und authentifizieren Sie sich mit Ihren AWS Anmeldeinformationen.

1. Wählen Sie **Benutzerpools** und dann den Benutzerpool aus, den Sie erstellt haben. Sie finden Ihre *pool-id* **Benutzerpool-ID**.

1. Wählen Sie dort **App-Integration** aus, wo Sie Ihre finden können*your-cognito-domain*, und gehen Sie dann zu **App-Clients und Analysen** und wählen Sie Ihre App aus.

1. Im **App-Client: YourApp** findest du*client-name*,*client-id*, und *client-secret* (**Geheimes Client-Geheimnis anzeigen**).

1. *region-id*entspricht der AWS Region-ID, in der Sie Ihren Amazon Cognito Cognito-Benutzer und Ihren Benutzerpool erstellt haben. Beispiel: `eu-west-3`.

1. *redirect-uri*Geben Sie den URI ein, den Sie für **Zulässige Rückruf-URL** angegeben haben. In unserem Beispiel ist `http://localhost:8080/planetsdemo/login/oauth2/code/cognito` es.

Sie können jetzt Ihre Gapwalk-Anwendung bereitstellen und den zuvor erstellten Benutzer verwenden, um sich bei Ihrer App anzumelden.

# Konfigurieren Sie die Gapwalk-Authentifizierung OAuth2 mit Keycloak
<a name="ba-runtime-auth-keycloak"></a>

In diesem Thema wird beschrieben, wie die OAuth2 Authentifizierung für Gapwalk-Anwendungen mit Keycloak als Identitätsanbieter (IdP) konfiguriert wird. In diesem Tutorial verwenden wir Keycloak 24.0.0.

## Voraussetzungen
<a name="ba-runtime-auth-keycloak-prereq"></a>
+ [Keycloak](https://www.keycloak.org/)
+ Gapwalk-Anwendung

## Einrichtung von Keycloak
<a name="keycloak-setup"></a>

1. Gehen Sie in Ihrem Webbrowser zu Ihrem Keycloak-Dashboard. Die Standardanmeldedaten sind admin/admin. Gehen Sie zur Navigationsleiste oben links und erstellen Sie einen Bereich mit dem Namen**demo**, wie in der folgenden Abbildung gezeigt.  
![\[alt_text\]](http://docs.aws.amazon.com/de_de/m2/latest/userguide/images/ba-runtime-auth-keycloak_2.png)

1. Erstellen Sie einen Client mit dem Namen**app-demo**.  
![\[User interface for creating a new client in an authentication management system.\]](http://docs.aws.amazon.com/de_de/m2/latest/userguide/images/ba-runtime-auth-keycloak_3.jpg)

   `localhost:8080`Ersetzen Sie es durch die Adresse Ihrer Gapwalk-Anwendung  
![\[alt_text\]](http://docs.aws.amazon.com/de_de/m2/latest/userguide/images/ba-runtime-auth-keycloak_4.png)  
![\[alt_text\]](http://docs.aws.amazon.com/de_de/m2/latest/userguide/images/ba-runtime-auth-keycloak_5.png)

1. **Um Ihr Client-Geheimnis zu erhalten, wählen Sie **Clients**, dann **App-Demo und dann Credentials**.**  
![\[alt_text\]](http://docs.aws.amazon.com/de_de/m2/latest/userguide/images/ba-runtime-auth-keycloak_6.jpg)

1. Wählen Sie **Clients**, dann **Client-Bereiche und dann Vordefinierten** Mapper **hinzufügen** aus. Wählen Sie **Realm-Rollen** aus.  
![\[alt_text\]](http://docs.aws.amazon.com/de_de/m2/latest/userguide/images/ba-runtime-auth-keycloak_7.jpg)

1. Bearbeiten Sie Ihre Realm-Rolle mit der in der folgenden Abbildung gezeigten Konfiguration.  
![\[alt_text\]](http://docs.aws.amazon.com/de_de/m2/latest/userguide/images/ba-runtime-auth-keycloak_8.jpg)

1. Merken Sie sich den definierten **Namen für den Token-Anspruch**. Sie benötigen diesen Wert in der Definition der Gapwalk-Einstellungen für die `gapwalk-application.security.claimGroupName` Eigenschaft.  
![\[alt_text\]](http://docs.aws.amazon.com/de_de/m2/latest/userguide/images/ba-runtime-auth-keycloak_9.jpg)

1. Wählen Sie **Realms-Rollen** und erstellen Sie 3 Rollen:**SUPER\$1ADMIN**, **ADMIN** und. **USER** Diese Rollen werden später der Gapwalk-Anwendung `ROLE_SUPER_ADMIN``ROLE_ADMIN`, und `ROLE_USER` zugeordnet, um auf einige eingeschränkte API-REST-Aufrufe zugreifen zu können.  
![\[alt_text\]](http://docs.aws.amazon.com/de_de/m2/latest/userguide/images/ba-runtime-auth-keycloak_10.jpg)

## Integrieren Sie Keycloak in die Gapwalk-Anwendung
<a name="gapwalk-setup"></a>

Bearbeiten Sie Ihre wie folgt: `application-main.yml`

```
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
```

Ersetzen Sie*<KEYCLOAK\$1SERVER\$1HOSTNAME>*, *<YOUR\$1REALM\$1NAME>**<YOUR\$1CLIENT\$1ID>*, und *<YOUR\$1CLIENT\$1SECRET>* durch Ihren Keycloak-Server-Hostnamen, Ihren Realm-Namen, Ihre Client-ID und Ihr Client-Geheimnis.

# Ratenbegrenzung für AWS Transform for Mainframe Runtime konfigurieren
<a name="ba-runtime-rate-limiting"></a>

AWS Transform for Mainframe Runtime umfasst eine integrierte Funktion zur Ratenbegrenzung, um die Gapwalk-Anwendung vor übermäßigen Anfragen und potenziellem Missbrauch zu schützen. Das System zur Ratenbegrenzung verwendet den Token-Bucket-Algorithmus, um sowohl Burst-Kapazität als auch dauerhafte Ratenbegrenzung bereitzustellen.

**Topics**
+ [Überblick über die Ratenbegrenzung](#ba-runtime-rate-limiting-overview)
+ [Konfigurationseigenschaften](#ba-runtime-rate-limiting-config)
+ [Ratenbegrenzung aktivieren](#ba-runtime-rate-limiting-enable)
+ [Identifizierung des Kunden](#ba-runtime-rate-limiting-client-id)
+ [Header zur Ratenbegrenzung](#ba-runtime-rate-limiting-headers)
+ [Speicherverwaltung](#ba-runtime-rate-limiting-memory)

## Überblick über die Ratenbegrenzung
<a name="ba-runtime-rate-limiting-overview"></a>

Das Ratenbegrenzungssystem bietet die folgenden Funktionen:

**Token-Bucket-Algorithmus**  
+ Ermöglicht Burst-Traffic bis zur konfigurierten Burst-Kapazität
+ Füllt Token mit einer konstanten Geschwindigkeit auf, die auf Anfragen pro Minute basiert
+ Sorgt für eine reibungslose Ratenbegrenzung, ohne legitime Verkehrsspitzen zu blockieren

**Identifizierung des Kunden**  
+ Identifiziert Clients anhand der IP-Adresse mit Proxy-Unterstützung
+ Unterstützungen X-Forwarded-For und X-Real-IP Header
+ Behandelt Loadbalancer- und Reverse-Proxy-Szenarien

**Automatische Arbeitsspeicher-Verwaltung**  
+ Bereinigt automatisch abgelaufene Ratenlimit-Buckets
+ Konfigurierbare Säuberungsintervalle und Ablaufzeiten
+ Beugt Speicherlecks bei Anwendungen mit langer Laufzeit vor

**HTTP-Integration**  
+ Gibt HTTP 429 (Too Many Requests) zurück, wenn die Grenzwerte überschritten werden
+ Schließt Standard-Header für die Ratenbegrenzung in Antworten ein
+ Stellt Informationen zum erneuten Versuch für Kunden bereit

## Konfigurationseigenschaften
<a name="ba-runtime-rate-limiting-config"></a>

Konfigurieren Sie die Ratenbegrenzung in Ihrer Datei: `application-main.yaml`

```
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)
```

### Beschreibungen der Immobilien
<a name="ba-runtime-rate-limiting-config-properties"></a>

**aktiviert**  
Hauptschalter zum Aktivieren oder Deaktivieren der Funktion zur Ratenbegrenzung. Standard: `false`

**requestsPerMinute**  
Anzahl der Anfragen, die pro Minute für eine dauerhafte Ratenbegrenzung zulässig sind. Dies entspricht der Token-Nachfüllrate. Standard: `1000`

**Burst-Kapazität**  
Maximale Anzahl von Anfragen, die in einem Burst zulässig sind, bevor die Ratenbegrenzung gilt. Sollte höher sein`requestsPerMinute`, als um Traffic-Spitzen zuzulassen. Standard: `1500`

**Header einbeziehen**  
Ob Header für Standardratenbegrenzungen (`X-RateLimit-Limit`,`X-RateLimit-Remaining`,`X-RateLimit-Reset`) in HTTP-Antworten aufgenommen werden sollen. Standard: `true`

**cleanupIntervalMinutes**  
Intervall in Minuten zwischen der automatischen Bereinigung abgelaufener Ratenlimit-Buckets. Hilft, Speicherlecks zu verhindern. Standard: `5`

**bucketExpiryHours**  
Zeit in Stunden, nach deren Ablauf ungenutzte Ratenlimit-Buckets als abgelaufen gelten und für eine Bereinigung in Frage kommen. Standard: `1`

**errorMessage**  
Benutzerdefinierte Fehlermeldung, die in der JSON-Antwort zurückgegeben wird, wenn das Ratenlimit überschritten wird. Standard: `"Too many requests. Try again later."`

**Tipps auf die weiße Liste**  
Durch Kommas getrennte Liste von IP-Adressen, die die Ratenbegrenzung vollständig umgehen. Nützlich für Integritätsprüfungen oder vertrauenswürdige Systeme. Standard: `empty`

**perEndpointLimiting**  
Gibt an, ob separate Ratenlimits pro Endpunkt statt nur pro Client angewendet werden sollen. Derzeit nicht implementiert. Standard: `false`

## Ratenbegrenzung aktivieren
<a name="ba-runtime-rate-limiting-enable"></a>

So aktivieren Sie die Ratenbegrenzung mit den Standardeinstellungen:

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

## Identifizierung des Kunden
<a name="ba-runtime-rate-limiting-client-id"></a>

Das Ratenbegrenzungssystem identifiziert Kunden anhand der folgenden Prioritätsreihenfolge:

1. **X-Forwarded-For Header** (erste IP, wenn durch Kommas getrennt)

1. **X-Real-IP Kopfzeile**

1. **Remote-Adresse** aus der HTTP-Anfrage

Auf diese Weise wird eine korrekte Identifizierung des Clients gewährleistet, wenn sich die Anwendung hinter folgenden Umständen befindet:
+ Load Balancers
+ Reverse-Proxys
+ CDNs
+ API-Gateways

### Beispiel für eine Kundenidentifikation
<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
```

## Header zur Ratenbegrenzung
<a name="ba-runtime-rate-limiting-headers"></a>

Wenn `includeHeaders` aktiviert, werden die folgenden Header zu HTTP-Antworten hinzugefügt:

**X- RateLimit -Limit**  
Die Obergrenze des Ratenlimits für den Kunden (Anfragen pro Minute)

**X- RateLimit -Verbleibend**  
Die Anzahl der Anfragen, die im aktuellen Ratenlimitfenster noch übrig sind

**X- RateLimit -Zurücksetzen**  
Der Zeitpunkt, zu dem das Ratenbegrenzungsfenster zurückgesetzt wird (Unix-Zeitstempel)

### Beispiel für Antwortheader
<a name="ba-runtime-rate-limiting-headers-example"></a>

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

### Das Ratenlimit hat die Antwort überschritten
<a name="ba-runtime-rate-limiting-headers-exceeded"></a>

Wenn das Ratenlimit überschritten wird, gibt das System Folgendes zurück:

**HTTP-Status**  
429 Zu viele Anfragen

**Content-Type**  
application/json

**Retry-After**  
Anzahl der Sekunden, die gewartet werden müssen, bevor es erneut versucht wird

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

## Speicherverwaltung
<a name="ba-runtime-rate-limiting-memory"></a>

Das System zur Geschwindigkeitsbegrenzung verwaltet den Arbeitsspeicher automatisch, um Datenlecks bei Anwendungen mit langer Laufzeit zu verhindern:

**Automatische Säuberung**  
+ Läuft alle Minuten `cleanupIntervalMinutes`
+ Entfernt Eimer, die stundenlang unbenutzt waren `bucketExpiryHours`
+ Protokolliert die Säuberungsaktivitäten zur Überwachung

**Speicher-Effizienz**  
+ Verwendet aus Gründen der Thread-Sicherheit parallele Datenstrukturen
+ Lazy-Bucket-Erstellung (nur bei Bedarf)
+ Effiziente Token-Bucket-Implementierung

### Überwachung der Säuberungsaktivitäten
<a name="ba-runtime-rate-limiting-memory-monitoring"></a>

Suchen Sie in den Protokollen nach Säuberungsmeldungen:

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