

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.

# Steuern und verwalten Sie den Zugriff auf HTTP APIs in API Gateway
<a name="http-api-access-control"></a>

API Gateway unterstützt mehrere Mechanismen zur Steuerung und Verwaltung des Zugriffs auf Ihre HTTP-API:
+ **Lambda-Autorisierer** verwenden Lambda-Funktionen, um den Zugriff auf zu kontrollieren. APIs Weitere Informationen finden Sie unter [Steuern Sie den Zugriff auf HTTP APIs mit AWS Lambda Autorisierern](http-api-lambda-authorizer.md).
+ **JWT-Autorisierer** verwenden JSON-Webtoken, um den Zugriff auf zu kontrollieren. APIs Weitere Informationen finden Sie unter [Steuern Sie den Zugriff auf HTTP APIs mit JWT-Autorisierern in API Gateway](http-api-jwt-authorizer.md).
+ ** AWS Standard-IAM-Rollen und -Richtlinien bieten flexible und robuste Zugriffskontrollen**. Mithilfe von IAM-Rollen und -Richtlinien können Sie steuern, wer Ihre APIs Rollen erstellen und verwalten darf und wer sie aufrufen kann. Weitere Informationen finden Sie unter [Steuern Sie den Zugriff auf HTTP APIs mit der IAM-Autorisierung in API Gateway](http-api-access-control-iam.md).

Um Ihre Sicherheitslage zu verbessern, empfehlen wir, für alle Routen Ihrer HTTP-API einen Genehmiger zu konfigurieren. Dies kann erforderlich sein, um verschiedene Compliance-Rahmenwerke einzuhalten. Weitere Informationen finden Sie unter [Amazon-API-Gateway-Steuerelemente](https://docs.aws.amazon.com/securityhub/latest/userguide/apigateway-controls.html) im *Benutzerhandbuch für AWS Security Hub *.

# Steuern Sie den Zugriff auf HTTP APIs mit AWS Lambda Autorisierern
<a name="http-api-lambda-authorizer"></a>

Sie verwenden einen Lambda-Genehmiger, um den Zugriff auf Ihre HTTP-API mit einer Lambda-Funktion zu steuern. Wenn dann ein Client Ihre API aufruft, ruft API Gateway Ihre Lambda-Funktion auf. API Gateway verwendet die Antwort Ihrer Lambda-Funktion, um festzustellen, ob der Client auf Ihre API zugreifen kann.

## Nutzlastformatversion
<a name="http-api-lambda-authorizer.payload-format"></a>

Die Nutzlastformatversion des Genehmigers gibt das Format der Daten an, die API Gateway an einen Lambda-Genehmiger sendet, und wie API Gateway die Antwort von Lambda interpretiert. Wenn Sie keine Version im Payload-Format angeben, wird standardmäßig die neueste Version AWS-Managementkonsole verwendet. Wenn Sie einen Lambda-Autorisierer mithilfe des AWS CLI, CloudFormation, oder eines SDK erstellen, müssen Sie einen angeben. `authorizerPayloadFormatVersion` Die unterstützten Werte sind `1.0` und `2.0`. 

 Wenn Sie Kompatibilität mit REST benötigen APIs, verwenden Sie Version. `1.0`

Die folgenden Beispiele zeigen die Struktur jeder Nutzlastformatversion.

------
#### [ 2.0 ]

```
{
  "version": "2.0",
  "type": "REQUEST",
  "routeArn": "arn:aws:execute-api:us-east-1:123456789012:abcdef123/test/GET/request",
  "identitySource": ["user1", "123"],
  "routeKey": "$default",
  "rawPath": "/my/path",
  "rawQueryString": "parameter1=value1&parameter1=value2&parameter2=value",
  "cookies": ["cookie1", "cookie2"],
  "headers": {
    "header1": "value1",
    "header2": "value2"
  },
  "queryStringParameters": {
    "parameter1": "value1,value2",
    "parameter2": "value"
  },
  "requestContext": {
    "accountId": "123456789012",
    "apiId": "api-id",
    "authentication": {
      "clientCert": {
        "clientCertPem": "CERT_CONTENT",
        "subjectDN": "www.example.com",
        "issuerDN": "Example issuer",
        "serialNumber": "1",
        "validity": {
          "notBefore": "May 28 12:30:02 2019 GMT",
          "notAfter": "Aug  5 09:36:04 2021 GMT"
        }
      }
    },
    "domainName": "id.execute-api.us-east-1.amazonaws.com",
    "domainPrefix": "id",
    "http": {
      "method": "POST",
      "path": "/my/path",
      "protocol": "HTTP/1.1",
      "sourceIp": "IP",
      "userAgent": "agent"
    },
    "requestId": "id",
    "routeKey": "$default",
    "stage": "$default",
    "time": "12/Mar/2020:19:03:58 +0000",
    "timeEpoch": 1583348638390
  },
  "pathParameters": { "parameter1": "value1" },
  "stageVariables": { "stageVariable1": "value1", "stageVariable2": "value2" }
}
```

------
#### [ 1.0 ]

```
{
  "version": "1.0",
  "type": "REQUEST",
  "methodArn": "arn:aws:execute-api:us-east-1:123456789012:abcdef123/test/GET/request",
  "identitySource": "user1,123",
  "authorizationToken": "user1,123",
  "resource": "/request",
  "path": "/request",
  "httpMethod": "GET",
  "headers": {
    "X-AMZ-Date": "20170718T062915Z",
    "Accept": "*/*",
    "HeaderAuth1": "headerValue1",
    "CloudFront-Viewer-Country": "US",
    "CloudFront-Forwarded-Proto": "https",
    "CloudFront-Is-Tablet-Viewer": "false",
    "CloudFront-Is-Mobile-Viewer": "false",
    "User-Agent": "..."
  },
  "queryStringParameters": {
    "QueryString1": "queryValue1"
  },
  "pathParameters": {},
  "stageVariables": {
    "StageVar1": "stageValue1"
  },
  "requestContext": {
    "path": "/request",
    "accountId": "123456789012",
    "resourceId": "05c7jb",
    "stage": "test",
    "requestId": "...",
    "identity": {
      "apiKey": "...",
      "sourceIp": "...",
      "clientCert": {
        "clientCertPem": "CERT_CONTENT",
        "subjectDN": "www.example.com",
        "issuerDN": "Example issuer",
        "serialNumber": "a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1",
        "validity": {
          "notBefore": "May 28 12:30:02 2019 GMT",
          "notAfter": "Aug  5 09:36:04 2021 GMT"
        }
      }
    },
    "resourcePath": "/request",
    "httpMethod": "GET",
    "apiId": "abcdef123"
  }
}
```

------

## Antwortformat des Lambda-Genehmigers
<a name="http-api-lambda-authorizer.payload-format-response"></a>

Die Nutzlastformatversion bestimmt auch die Struktur der Antwort, die von Ihrer Lambda-Funktion zurückgeben werden muss.

### Lambda-Funktionsantwort für Format 1.0
<a name="http-api-lambda-authorizer.v1"></a>

Wenn Sie Formatversion `1.0` auswählen, müssen Lambda-Genehmiger eine IAM-Richtlinie zurückgeben, die den Zugriff auf Ihre API-Route zulässt oder verweigert. Sie können die IAM-Standardrichtliniensyntax in der Richtlinie verwenden. Beispiele für IAM-Richtlinien finden Sie unter [Kontrollieren des Zugriffs für den API-Aufruf](api-gateway-control-access-using-iam-policies-to-invoke-api.md). Mit können Sie Kontexteigenschaften an Lambda-Integrationen oder -Zugriffsprotokolle übergebe `$context.authorizer.property`. Das `context`-Objekt ist optional und `claims` ist ein reservierter Platzhalter, der nicht als Kontextobjekt verwendet werden kann. Weitere Informationen hierzu finden Sie unter [HTTP-API-Zugriffsprotokolle anpassen](http-api-logging-variables.md).

**Example**    
****  

```
{
  "principalId": "abcdef", 
  "policyDocument": {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Action": "execute-api:Invoke",
        "Effect": "Allow|Deny",
        "Resource": "arn:aws:execute-api:{regionId}:{accountId}:{apiId}/{stage}/{httpVerb}/[{resource}/[{child-resources}]]"
      }
    ]
  },
  "context": {
    "exampleKey": "exampleValue"
  }
}
```

### Lambda-Funktionsantwort für Format 2.0
<a name="http-api-lambda-authorizer.v2"></a>

Wenn Sie Formatversion `2.0` auswählen, können Sie einen booleschen Wert oder eine IAM-Richtlinie zurückgeben, die die IAM-Standardrichtliniensyntax Ihrer Lambda-Funktion verwendet. Um einen booleschen Wert zurückzugeben, aktivieren Sie einfache Antworten für den Genehmiger. Die folgenden Beispiele veranschaulichen das Format, das Sie für die Rückgabe Ihrer Lambda-Funktion codieren müssen. Das Objekt `context` ist optional. Mit können Sie Kontexteigenschaften an Lambda-Integrationen oder -Zugriffsprotokolle übergebe `$context.authorizer.property`. Weitere Informationen hierzu finden Sie unter [HTTP-API-Zugriffsprotokolle anpassen](http-api-logging-variables.md).

------
#### [ Simple response ]

```
{
  "isAuthorized": true/false,
  "context": {
    "exampleKey": "exampleValue"
  }
}
```

------
#### [ IAM policy ]

****  

```
{
  "principalId": "abcdef", 
  "policyDocument": {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Action": "execute-api:Invoke",
        "Effect": "Allow|Deny",
        "Resource": "arn:aws:execute-api:{regionId}:{accountId}:{apiId}/{stage}/{httpVerb}/[{resource}/[{child-resources}]]"
      }
    ]
  },
  "context": {
    "exampleKey": "exampleValue"
  }
}
```

------

## Beispiel für Lambda-Genehmiger-Funktionen
<a name="http-api-lambda-authorizer.example-code"></a>

Die Lambda-Funktionen des folgenden Node.js-Beispiels veranschaulichen die erforderlichen Antwortformate, die Sie von Ihrer Lambda-Funktion für Formatversion `2.0` der Nutzlast zurückgeben müssen.

------
#### [ Simple response - Node.js ]

```
export const handler = async(event) => {
    let response = {
        "isAuthorized": false,
        "context": {
            "stringKey": "value",
            "numberKey": 1,
            "booleanKey": true,
            "arrayKey": ["value1", "value2"],
            "mapKey": {"value1": "value2"}
        }
    };
    
    if (event.headers.authorization === "secretToken") {
        console.log("allowed");
        response = {
            "isAuthorized": true,
            "context": {
                "stringKey": "value",
                "numberKey": 1,
                "booleanKey": true,
                "arrayKey": ["value1", "value2"],
                "mapKey": {"value1": "value2"}
            }
        };
    }

    return response;

};
```

------
#### [ Simple response - Python ]

```
import json


def lambda_handler(event, context):
    response = {
        "isAuthorized": False,
        "context": {
            "stringKey": "value",
            "numberKey": 1,
            "booleanKey": True,
            "arrayKey": ["value1", "value2"],
            "mapKey": {"value1": "value2"}
        }
    }

    try:
        if (event["headers"]["authorization"] == "secretToken"):
            response = {
                "isAuthorized": True,
                "context": {
                    "stringKey": "value",
                    "numberKey": 1,
                    "booleanKey": True,
                    "arrayKey": ["value1", "value2"],
                    "mapKey": {"value1": "value2"}
                }
            }
            print('allowed')
            return response
        else:
            print('denied')
            return response
    except BaseException:
        print('denied')
        return response
```

------
#### [ IAM policy - Node.js ]

```
export const handler = async(event) => {
  if (event.headers.authorization == "secretToken") {
    console.log("allowed");
    return {
      "principalId": "abcdef", // The principal user identification associated with the token sent by the client.
      "policyDocument": {
        "Version": "2012-10-17",		 	 	 
        "Statement": [{
          "Action": "execute-api:Invoke",
          "Effect": "Allow",
          "Resource": event.routeArn
        }]
      },
      "context": {
        "stringKey": "value",
        "numberKey": 1,
        "booleanKey": true,
        "arrayKey": ["value1", "value2"],
        "mapKey": { "value1": "value2" }
      }
    };
  }
  else {
    console.log("denied");
    return {
      "principalId": "abcdef", // The principal user identification associated with the token sent by the client.
      "policyDocument": {
        "Version": "2012-10-17",		 	 	 
        "Statement": [{
          "Action": "execute-api:Invoke",
          "Effect": "Deny",
          "Resource": event.routeArn
        }]
      },
      "context": {
        "stringKey": "value",
        "numberKey": 1,
        "booleanKey": true,
        "arrayKey": ["value1", "value2"],
        "mapKey": { "value1": "value2" }
      }
    };
  }
};
```

------
#### [ IAM policy - Python ]

```
import json


def lambda_handler(event, context):
    response = {
        # The principal user identification associated with the token sent by
        # the client.
        "principalId": "abcdef",
        "policyDocument": {
            "Version": "2012-10-17",		 	 	 
            "Statement": [{
                "Action": "execute-api:Invoke",
                "Effect": "Deny",
                "Resource": event["routeArn"]
            }]
        },
        "context": {
            "stringKey": "value",
            "numberKey": 1,
            "booleanKey": True,
            "arrayKey": ["value1", "value2"],
            "mapKey": {"value1": "value2"}
        }
    }

    try:
        if (event["headers"]["authorization"] == "secretToken"):
            response = {
                # The principal user identification associated with the token
                # sent by the client.
                "principalId": "abcdef",
                "policyDocument": {
                    "Version": "2012-10-17",		 	 	 
                    "Statement": [{
                        "Action": "execute-api:Invoke",
                        "Effect": "Allow",
                        "Resource": event["routeArn"]
                    }]
                },
                "context": {
                    "stringKey": "value",
                    "numberKey": 1,
                    "booleanKey": True,
                    "arrayKey": ["value1", "value2"],
                    "mapKey": {"value1": "value2"}
                }
            }
            print('allowed')
            return response
        else:
            print('denied')
            return response
    except BaseException:
        print('denied')
        return response
```

------

## Identitätsquellen
<a name="http-api-lambda-authorizer.identity-sources"></a>

Sie können optional Identitätsquellen für einen Lambda-Genehmiger angeben. Identitätsquellen geben den Speicherort der Daten an, die für die Autorisierung einer Anforderung erforderlich sind. Beispielsweise können Sie Header- oder Abfragezeichenfolgenwerte als Identitätsquellen angeben. Wenn Sie Identitätsquellen angeben, müssen Clients diese in die Anforderung aufnehmen. Wenn die Anforderung des Clients die Identitätsquellen nicht enthält, ruft API Gateway Ihren Lambda-Genehmiger nicht auf, und der Client erhält einen `401`-Fehler.

In der folgenden Tabelle werden die unterstützten Identitätsquellen für einen Lambda-Genehmiger beschrieben.


| **Typ** | **Beispiel** | **Hinweise** | 
| --- | --- | --- | 
| Header-Wert | \$1request.header. name | Bei Header-Namen wird nicht zwischen Groß- und Kleinschreibung unterschieden. | 
| Abfragezeichenfolgenwert | \$1request.querystring. name | Abfragezeichenfolgennamen unterscheiden zwischen Groß- und Kleinschreibung. | 
| Kontextvariable | \$1kontext. variableName | Der Wert einer unterstützten [Kontextvariablen](http-api-logging-variables.md). | 
| Stufenvariable | \$1stageVariablen. variableName | Der Wert einer [Stufenvariablen](http-api-stages.stage-variables.md). | 

Sie können auch direkt ` {"errorMessage" : "Unauthorized"}` aus Ihrer Lambda-Funktion zurückgeben, um einen `401`-Fehler an die Clients zurückzugeben. Wenn Sie einen `401`-Fehler direkt aus Ihrer Lambda-Funktion an die Clients zurückgeben, geben Sie beim Erstellen Ihres Lambda-Genehmigers keine Identitätsquellen an.

## Zwischenspeichern der Antworten des Genehmigers
<a name="http-api-lambda-authorizer.caching"></a>

Sie können das Caching für einen Lambda-Autorisierer aktivieren, indem Sie einen angeben. [authorizerResultTtlInSeconds](https://docs.aws.amazon.com/apigatewayv2/latest/api-reference/apis-apiid-authorizers.html#apis-apiid-authorizers-prop-createauthorizerinput-authorizerresultttlinseconds) Wenn für einen Genehmiger Zwischenspeicherung aktiviert ist, verwendet API Gateway die Identitätsquellen des Genehmigers als Cache-Schlüssel. Wenn ein Client dieselben Parameter in Identitätsquellen innerhalb der konfigurierten TTL angibt, verwendet API Gateway das zwischengespeicherte Genehmiger-Ergebnis, anstatt Ihre Lambda-Funktion aufzurufen.

Um das Caching zu aktivieren, muss der Genehmiger über mindestens eine Identitätsquelle verfügen.

Wenn Sie einfache Antworten für einen Genehmiger aktivieren, erlaubt oder verweigert die Antwort des Genehmigers alle API-Anforderungen, die mit den zwischengespeicherten Identitätsquellwerten übereinstimmen, vollständig. Um detailliertere Berechtigungen zu erhalten, deaktivieren Sie einfache Antworten und geben Sie eine IAM-Richtlinie zurück. Je nach Genehmiger muss Ihre IAM-Richtlinie möglicherweise den Zugriff auf mehrere Ressourcen steuern.

Standardmäßig verwendet API Gateway die zwischengespeicherte Genehmiger-Antwort für alle Routen einer API, die den Genehmiger verwenden. Um Antworten pro Route zwischenzuspeichern, fügen Sie den Identitätsquellen Ihres Genehmigers `$context.routeKey` hinzu.

## Erstellen eines Lambda-Genehmigers
<a name="http-api-lambda-authorizer.example-create"></a>

Wenn Sie einen Lambda-Genehmiger erstellen, geben Sie die Lambda-Funktion an, die API Gateway verwenden soll. Sie müssen API Gateway die Berechtigung zum Aufrufen der Lambda-Funktion erteilen, indem Sie entweder die Ressourcenrichtlinie der Funktion oder eine IAM-Rolle verwenden. Der [create-authorizer](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/create-authorizer.html)-Befehl erstellt einen Lambda-Genehmiger:

```
aws apigatewayv2 create-authorizer \
    --api-id abcdef123 \
    --authorizer-type REQUEST \
    --identity-source '$request.header.Authorization' \
    --name lambda-authorizer \ 
    --authorizer-uri 'arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:123456789012:function:my-function/invocations' \
    --authorizer-payload-format-version '2.0' \
    --enable-simple-responses
```

Der folgende [add-permission](https://docs.aws.amazon.com/cli/latest/reference/lambda/add-permission.html)-Befehl aktualisiert die Ressourcenrichtlinie der Lambda-Funktion, um API Gateway die Berechtigung zum Aufrufen der Funktion zu erteilen. Wenn API Gateway nicht zum Aufrufen Ihrer Funktion berechtigt ist, erhalten Clients einen `500 Internal Server Error`.

```
aws lambda add-permission \
    --function-name my-authorizer-function \
    --statement-id apigateway-invoke-permissions-abc123 \ 
    --action lambda:InvokeFunction \
    --principal apigateway.amazonaws.com \
    --source-arn "arn:aws:execute-api:us-west-2:123456789012:api-id/authorizers/authorizer-id"
```

Nachdem Sie einen Genehmiger erstellt und API Gateway die Berechtigung zum Aufrufen erteilt haben, aktualisieren Sie Ihre Route, um den Genehmiger zu verwenden. Der folgende [update-route](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/update-route.html)-Befehl fügt der Route den Lambda-Genehmiger hinzu. Wenn Ihr Lambda-Genehmiger eine Richtlinienspeicherung verwendet, stellen Sie sicher, dass Sie die Richtlinie aktualisieren, um den Zugriff für die zusätzliche Route zu steuern.

```
aws apigatewayv2 update-route \
    --api-id abcdef123 \
    --route-id abc123 \
    --authorization-type CUSTOM \
    --authorizer-id def123
```

## Fehlerbehebung für Lambda-Genehmiger
<a name="http-api-lambda-authorizer.troubleshooting"></a>

Wenn API Gateway Ihren Lambda-Genehmiger nicht aufrufen kann oder Ihr Lambda-Genehmiger eine Antwort in einem ungültigen Format zurückgibt, erhalten Clients einen `500 Internal Server Error`.

Um Fehler zu beheben, [aktivieren Sie die Zugriffsprotokollierung](http-api-logging.md) für Ihre API-Stufe. Fügen Sie die `$context.authorizer.error`-Protokollierungsvariable in Ihr Protokollformat ein.

Wenn die Protokolle darauf hinweisen, dass API Gateway keine Berechtigung zum Aufrufen Ihrer Funktion besitzt, aktualisieren Sie die Ressourcenrichtlinie Ihrer Funktion oder stellen Sie eine IAM-Rolle bereit, um die API Gateway-Berechtigung zum Aufrufen des Genehmigers zu erteilen.

Wenn die Protokolle darauf hinweisen, dass Ihre Lambda-Funktion eine ungültige Antwort zurückgibt, überprüfen Sie, ob Ihre Lambda-Funktion eine Antwort im [erforderlichen Format](#http-api-lambda-authorizer.payload-format-response) zurückgibt.

# Steuern Sie den Zugriff auf HTTP APIs mit JWT-Autorisierern in API Gateway
<a name="http-api-jwt-authorizer"></a>

Sie können JSON Web Tokens (JWTs) als Teil der Frameworks [OpenID Connect (OIDC)](https://openid.net/specs/openid-connect-core-1_0.html) und [OAuth 2.0](https://oauth.net/2/) verwenden, um den Client-Zugriff auf Ihre zu beschränken. APIs

Wenn Sie einen JWT-Authorizer für eine Route Ihrer API konfigurieren, validiert API Gateway die, JWTs die Clients mit API-Anfragen einreichen. API Gateway genehmigt oder lehnt Anfragen basierend auf der Token-Validierung und optional Bereichen im Token ab. Wenn Sie Bereiche für eine Route konfigurieren, muss das Token mindestens einen der Bereiche der Route enthalten.

Sie können unterschiedliche Genehmiger für jede Route einer API konfigurieren oder denselben Genehmiger für mehrere Routen verwenden.

**Anmerkung**  
Es gibt keinen Standardmechanismus, um JWT-Zugriffstoken von anderen Typen wie OpenID Connect ID-Tokens zu unterscheiden. JWTs Wir empfehlen, Ihre Routen so zu konfigurieren, dass Autorisierungsbereiche erforderlich sind, es sei denn, Sie benötigen ID-Token für die API-Autorisierung Sie können Ihre JWT-Genehmiger auch so konfigurieren, dass Aussteller oder Zielgruppen erforderlich sind, die Ihr Identitätsanbieter nur bei der Ausgabe von JWT-Zugriffstoken verwendet.

## Autorisieren von API-Anfragen mit einem JWT-Genehmiger
<a name="http-api-jwt-authorizer.evaluation"></a>

API Gateway verwendet den folgenden allgemeinen Workflow, um Anfragen an Routen zu autorisieren, die für die Verwendung eines JWT-Genehmigers konfiguriert sind. 

1. Überprüfen Sie die [https://docs.aws.amazon.com/apigatewayv2/latest/api-reference/apis-apiid-authorizers-authorizerid.html#apis-apiid-authorizers-authorizerid-prop-authorizer-identitysource](https://docs.aws.amazon.com/apigatewayv2/latest/api-reference/apis-apiid-authorizers-authorizerid.html#apis-apiid-authorizers-authorizerid-prop-authorizer-identitysource) auf ein Token. Der `identitySource` kann nur das Token oder das Token mit dem Präfix `Bearer` enthalten.

1. Decodieren Sie das Token.

1. Überprüfen Sie den Algorithmus und die Signatur des Tokens mit dem vom des Ausstellers abgerufenen öffentlichen Schlüsse `jwks_uri`. Derzeit werden nur RSA-basierte Algorithmen unterstützt. API Gateway kann den öffentlichen Schlüssel zwei Stunden lang zwischenspeichern. Es hat sich bewährt, beim Wechseln von Schlüsseln eine bestimmte Frist einzuräumen, während der sowohl der alte als auch der neue Schlüssel gültig sind. 

1. Validieren Sie die Ansprüche. API Gateway evaluiert die folgenden Token-Ansprüche:
   +  [https://datatracker.ietf.org/doc/html/rfc7517#section-4.5](https://datatracker.ietf.org/doc/html/rfc7517#section-4.5) – Das Token muss einen Header-Anspruch haben, der mit dem Schlüssel in dem `jwks_uri` übereinstimmt, der das Token signiert hat.
   + [https://datatracker.ietf.org/doc/html/rfc7519#section-4.1.1](https://datatracker.ietf.org/doc/html/rfc7519#section-4.1.1) – Muss mit dem für den Genehmiger konfigurierten [https://docs.aws.amazon.com/apigatewayv2/latest/api-reference/apis-apiid-authorizers-authorizerid.html#apis-apiid-authorizers-authorizerid-model-jwtconfiguration](https://docs.aws.amazon.com/apigatewayv2/latest/api-reference/apis-apiid-authorizers-authorizerid.html#apis-apiid-authorizers-authorizerid-model-jwtconfiguration) übereinstimmen.
   + [https://datatracker.ietf.org/doc/html/rfc7519#section-4.1.3](https://datatracker.ietf.org/doc/html/rfc7519#section-4.1.3) oder `client_id` – Muss mit einem der für den Genehmiger konfigurierten [https://docs.aws.amazon.com/apigatewayv2/latest/api-reference/apis-apiid-authorizers-authorizerid.html#apis-apiid-authorizers-authorizerid-model-jwtconfiguration](https://docs.aws.amazon.com/apigatewayv2/latest/api-reference/apis-apiid-authorizers-authorizerid.html#apis-apiid-authorizers-authorizerid-model-jwtconfiguration)-Einträge übereinstimmen. API Gateway validiert `client_id` nur dann, wenn `aud` nicht vorhanden ist. Wenn sowohl `aud` als auch `client_id` vorhanden sind, bewertet API Gateway `aud`.
   + [https://datatracker.ietf.org/doc/html/rfc7519#section-4.1.4](https://datatracker.ietf.org/doc/html/rfc7519#section-4.1.4) – Muss nach der aktuellen Uhrzeit in UTC liegen. 
   + [https://datatracker.ietf.org/doc/html/rfc7519#section-4.1.5](https://datatracker.ietf.org/doc/html/rfc7519#section-4.1.5) – muss vor der aktuellen Uhrzeit in UTC liegen. 
   + [https://datatracker.ietf.org/doc/html/rfc7519#section-4.1.6](https://datatracker.ietf.org/doc/html/rfc7519#section-4.1.6) – Muss vor der aktuellen Uhrzeit in UTC liegen. 
   + [https://datatracker.ietf.org/doc/html/rfc6749#section-3.3](https://datatracker.ietf.org/doc/html/rfc6749#section-3.3) oder `scp` – Das Token muss mindestens einen der Bereiche in den [https://docs.aws.amazon.com/apigatewayv2/latest/api-reference/apis-apiid-routes-routeid.html#apis-apiid-routes-routeid-prop-updaterouteinput-authorizationscopes](https://docs.aws.amazon.com/apigatewayv2/latest/api-reference/apis-apiid-routes-routeid.html#apis-apiid-routes-routeid-prop-updaterouteinput-authorizationscopes) der Route enthalten.

Wenn einer dieser Schritte fehlschlägt, lehnt API Gateway die API-Anfrage ab.

Nach der Validierung des JWT übergibt API Gateway die Ansprüche im Token an die Integration der API-Route. Backend-Ressourcen, wie beispielsweise Lambda-Funktionen, können auf die JWT-Ansprüche zugreifen. Wenn das JWT beispielsweise den Identitätsanspruch `emailID` enthält, ist er für eine Lambda-Integration in `$event.requestContext.authorizer.jwt.claims.emailID` verfügbar. Weitere Informationen zur Nutzlast, die API Gateway an Lambda-Integrationen sendet, finden Sie unter [Erstellen Sie AWS Lambda Proxy-Integrationen für HTTP APIs in API Gateway](http-api-develop-integrations-lambda.md).

## Erstellen eines JWT-Genehmigers
<a name="http-api-jwt-authorizer.create"></a>

Bevor Sie einen JWT-Genehmiger erstellen, müssen Sie eine Clientanwendung bei einem Identitätsanbieter registrieren. Sie müssen darüber hinaus eine HTTP-API erstellt haben. Beispiele zum Erstellen einer HTTP-API finden Sie unter [Erstellen einer HTTP-API](http-api-develop.md#http-api-examples).

### Erstellen eines JWT-Genehmigers mit der Konsole
<a name="http-api-jwt-authorizer.create.console"></a>

Die folgenden Schritte zeigen, wie Sie mit der Konsole einen JWT-Genehmiger erstellen.

**So erstellen Sie mit der Konsole einen JWT-Genehmiger**

1. Melden Sie sich bei der API Gateway Gateway-Konsole unter [https://console.aws.amazon.com/apigatewayan](https://console.aws.amazon.com/apigateway).

1. Wählen Sie eine HTTP-API.

1. Wählen Sie im Hauptnavigationsbereich **Autorisierung** aus.

1. Wählen Sie die Registerkarte **Genehmiger verwalten** aus.

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

1. Wählen Sie unter **Genehmiger-Typ** den Wert **JWT** aus.

1. Konfigurieren Sie Ihren JWT-Genehmiger und geben Sie eine **Identitätsquelle** an, die die Quelle des Tokens definiert.

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

#### Erstellen Sie einen JWT-Autorisierer mit dem AWS CLI
<a name="http-api-jwt-authorizer.create.cli"></a>

Der folgende [create-authorizer](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/create-authorizer.html)-Befehl erstellt einen JWT-Genehmiger. Bei `jwt-configuration` geben Sie das `Audience` und `Issuer` als Ihren Identitätsanbieter an. Wenn Sie Amazon Cognito als Identitätsanbieter verwenden, lautet die `IssuerUrl` `https://cognito-idp.us-east-2.amazonaws.com/userPoolID`.

```
aws apigatewayv2 create-authorizer \
    --name authorizer-name \
    --api-id api-id \
    --authorizer-type JWT \
    --identity-source '$request.header.Authorization' \
    --jwt-configuration Audience=audience,Issuer=IssuerUrl
```

##### Erstellen Sie einen JWT-Autorisierer mit AWS CloudFormation
<a name="http-api-jwt-cfn.create"></a>

Die folgende CloudFormation Vorlage erstellt eine HTTP-API mit einem JWT-Autorisierer, der Amazon Cognito als Identitätsanbieter verwendet.

Die Ausgabe der CloudFormation Vorlage ist eine URL für eine von Amazon Cognito gehostete Benutzeroberfläche, über die sich Kunden registrieren und anmelden können, um ein JWT zu erhalten. Nachdem sich ein Client angemeldet hat, wird er mit einem Zugriffstoken in der URL zu Ihrer HTTP-API weitergeleitet. Um die API mit dem Zugriffstoken aufzurufen, ändern Sie das `#` in der URL in ein `?`, um das Token als Abfragezeichenfolgenparameter zu verwenden.

##### Beispielvorlage CloudFormation
<a name="http-api-jwt-cfn-example"></a>

```
AWSTemplateFormatVersion: '2010-09-09'
Description: |
  Example HTTP API with a JWT authorizer. This template includes an Amazon Cognito user pool as the issuer for the JWT authorizer 
  and an Amazon Cognito app client as the audience for the authorizer. The outputs include a URL for an Amazon Cognito hosted UI where clients can 
  sign up and sign in to receive a JWT. After a client signs in, the client is redirected to your HTTP API with an access token 
  in the URL. To invoke the API with the access token, change the '#' in the URL to a '?' to use the token as a query string parameter.

Resources:
  MyAPI:
    Type: AWS::ApiGatewayV2::Api
    Properties: 
      Description: Example HTTP API
      Name: api-with-auth
      ProtocolType: HTTP
      Target: !GetAtt MyLambdaFunction.Arn
  DefaultRouteOverrides:
    Type: AWS::ApiGatewayV2::ApiGatewayManagedOverrides
    Properties: 
      ApiId: !Ref MyAPI
      Route: 
        AuthorizationType: JWT
        AuthorizerId: !Ref JWTAuthorizer
  JWTAuthorizer:
    Type: AWS::ApiGatewayV2::Authorizer
    Properties: 
      ApiId: !Ref MyAPI
      AuthorizerType: JWT
      IdentitySource: 
        - '$request.querystring.access_token'
      JwtConfiguration: 
        Audience: 
        - !Ref AppClient
        Issuer: !Sub https://cognito-idp.${AWS::Region}.amazonaws.com/${UserPool}
      Name: test-jwt-authorizer
  MyLambdaFunction:
    Type: AWS::Lambda::Function
    Properties:
      Runtime: nodejs18.x
      Role: !GetAtt FunctionExecutionRole.Arn
      Handler: index.handler
      Code:
        ZipFile: |
          exports.handler = async (event) => {
              const response = {
                  statusCode: 200,
                  body: JSON.stringify('Hello from the ' + event.routeKey + ' route!'),
              };
              return response;
          };
  APIInvokeLambdaPermission:
    Type: AWS::Lambda::Permission
    Properties:
      FunctionName: !Ref MyLambdaFunction
      Action: lambda:InvokeFunction
      Principal: apigateway.amazonaws.com
      SourceArn: !Sub arn:${AWS::Partition}:execute-api:${AWS::Region}:${AWS::AccountId}:${MyAPI}/$default/$default
  FunctionExecutionRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17		 	 	 '
        Statement:
          - Effect: Allow
            Principal:
              Service:
              - lambda.amazonaws.com
            Action:
              - 'sts:AssumeRole'
      ManagedPolicyArns: 
        - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
  UserPool:
    Type: AWS::Cognito::UserPool
    Properties:
      UserPoolName: http-api-user-pool
      AutoVerifiedAttributes:
        - email
      Schema:
        - Name: name
          AttributeDataType: String
          Mutable: true
          Required: true
        - Name: email
          AttributeDataType: String
          Mutable: false
          Required: true
  AppClient:
    Type: AWS::Cognito::UserPoolClient
    Properties:
      AllowedOAuthFlows: 
        - implicit
      AllowedOAuthScopes: 
        - aws.cognito.signin.user.admin
        - email
        - openid
        - profile
      AllowedOAuthFlowsUserPoolClient: true
      ClientName: api-app-client
      CallbackURLs:
        - !Sub https://${MyAPI}.execute-api.${AWS::Region}.amazonaws.com
      ExplicitAuthFlows:
        - ALLOW_USER_PASSWORD_AUTH
        - ALLOW_REFRESH_TOKEN_AUTH
      UserPoolId: !Ref UserPool
      SupportedIdentityProviders:
        - COGNITO 
  HostedUI:
    Type: AWS::Cognito::UserPoolDomain
    Properties: 
      Domain: !Join
        - '-'
        - - !Ref MyAPI
          - !Ref AppClient
      UserPoolId: !Ref UserPool
Outputs:
  SignupURL:
    Value: !Sub https://${HostedUI}.auth.${AWS::Region}.amazoncognito.com/login?client_id=${AppClient}&response_type=token&scope=email+profile&redirect_uri=https://${MyAPI}.execute-api.${AWS::Region}.amazonaws.com
```

## Aktualisieren einer Route zum Verwenden eines JWT-Genehmigers
<a name="http-api-jwt-authorizer.create.route"></a>

Sie können die Konsole, das oder ein AWS SDK verwenden AWS CLI, um eine Route so zu aktualisieren, dass sie einen JWT-Autorisierer verwendet.

### Aktualisieren einer Route zum Verwenden eines JWT-Genehmigers mit der Konsole
<a name="http-api-jwt-authorizer.create.route"></a>

Die folgenden Schritte zeigen, wie Sie mit der Konsole eine Route so aktualisieren, dass sie einen JWT-Genehmiger verwendet.

**So erstellen Sie mit der Konsole einen JWT-Genehmiger**

1. Melden Sie sich bei der API Gateway Gateway-Konsole unter [https://console.aws.amazon.com/apigatewayan](https://console.aws.amazon.com/apigateway).

1. Wählen Sie eine HTTP-API.

1. Wählen Sie im Hauptnavigationsbereich **Autorisierung** aus.

1. Wählen Sie zunächst eine Methode und anschließend Ihren Genehmiger aus dem Dropdown-Menü aus und klicken Sie auf **Genehmiger anfügen**.

#### Aktualisieren Sie eine Route, um einen JWT-Autorisierer zu verwenden, indem Sie AWS CLI
<a name="http-api-jwt-authorizer.create.route"></a>

Mit dem folgenden [update-route](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/update-route.html)-Befehl wird eine Route so aktualisiert, dass sie einen JWT-Genehmiger verwendet.

```
aws apigatewayv2 update-route \
   --api-id api-id  \
   --route-id route-id  \
   --authorization-type JWT \
   --authorizer-id authorizer-id \
   --authorization-scopes user.email
```

# Steuern Sie den Zugriff auf HTTP APIs mit der IAM-Autorisierung in API Gateway
<a name="http-api-access-control-iam"></a>

Sie können die IAM-Autorisierung für HTTP-API-Routen aktivieren. Wenn die IAM-Autorisierung aktiviert ist, müssen Clients [Signature Version 4 (Sigv4)](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html) verwenden, um ihre Anfragen mit AWS Anmeldeinformationen zu signieren. API Gateway ruft Ihre API-Route nur auf, wenn der Client über die `execute-api`-Berechtigung für die Route verfügt.

[Die IAM-Autorisierung für HTTP APIs ähnelt der für REST. APIs](api-gateway-control-access-using-iam-policies-to-invoke-api.md)

**Anmerkung**  
Ressourcenrichtlinien werden derzeit für HTTP APIs nicht unterstützt.

Beispiele für IAM-Richtlinien, die Clients die Berechtigung zum Aufrufen gewähren APIs, finden Sie unter. [Kontrollieren des Zugriffs für den API-Aufruf](api-gateway-control-access-using-iam-policies-to-invoke-api.md)

## Aktivieren der IAM-Autorisierung für eine Route
<a name="http-api-access-control-iam-example"></a>

Der folgende [update-route](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/update-route.html)-Befehl aktiviert die IAM-Autorisierung für eine HTTP-API-Route.

```
aws apigatewayv2 update-route \
    --api-id abc123 \
    --route-id abcdef \
    --authorization-type AWS_IAM
```