

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.

# Kontext wird hinzugefügt
<a name="context"></a>

*Kontext* ist die Information, die für politische Entscheidungen relevant ist, aber nicht Teil der Identität Ihres Auftraggebers, Ihrer Aktion oder Ihrer Ressource ist. Der Anspruch auf Zugriffstoken ist Kontext. Möglicherweise möchten Sie eine Aktion nur von einer Reihe von Quell-IP-Adressen aus zulassen oder nur, wenn sich Ihr Benutzer mit MFA angemeldet hat. Ihre Anwendung hat Zugriff auf diese kontextbezogenen Sitzungsdaten und muss sie für Autorisierungsanfragen ausfüllen. Die Kontextdaten in einer Autorisierungsanfrage mit verifizierten Berechtigungen müssen in einem Element im JSON-Format vorliegen. `contextMap`

Die Beispiele, die diesen Inhalt veranschaulichen, stammen aus einem [Beispielrichtlinienspeicher](policy-stores-create.md). Um dem nachzugehen, erstellen Sie den **DigitalPetStore**Beispiel-Richtlinienspeicher in Ihrer Testumgebung.

Das folgende Kontextobjekt deklariert einen von jedem Cedar-Datentyp für eine Anwendung auf der Grundlage des **DigitalPetStore**Beispielrichtlinienspeichers.

```
"context": {
  "contextMap": {
    "AccountCodes": {
      "set": [
        {
          "long": 111122223333
        },
        {
          "long": 444455556666
        },
        {
          "long": 123456789012
        }
      ]
    },
    "approvedBy": {
    "entityIdentifier": {
      "entityId": "Bob",
      "entityType": "DigitalPetStore::User"
    }
    },
    "MfaAuthorized": {
      "boolean": true
    },
    "NetworkInfo": {
      "record": {
        "IPAddress": {
          "string": "192.0.2.178"
        },
        "Country": {
          "string": "United States of America"
        },
        "SSL": {
          "boolean": true
        }
    }
    },
    "RequestedOrderCount": {
      "long": 4
    },
    "UserAgent": {
      "string": "My UserAgent 1.12"
    }
  }
}
```Datentypen im Autorisierungskontext

**Boolesch**  
Eine Binärdatei `true` oder ein `false` Wert. In diesem Beispiel `MfaAuthenticated` gibt der boolesche Wert von `true` for an, dass der Kunde eine Multi-Faktor-Authentifizierung durchgeführt hat, bevor er die Anzeige seiner Bestellung angefordert hat.

**Einstellen**  
Eine Sammlung von Kontextelementen. Gruppenmitglieder können alle vom gleichen Typ sein, wie in diesem Beispiel, oder von unterschiedlichen Typen, einschließlich einer verschachtelten Menge. In dem Beispiel ist der Kunde mit 3 verschiedenen Konten verknüpft.

**Zeichenfolge**  
Eine Folge von Buchstaben, Zahlen oder Symbolen, die in `"` Zeichen eingeschlossen sind. In diesem Beispiel steht die `UserAgent` Zeichenfolge für den Browser, mit dem der Kunde die Anzeige seiner Bestellung angefordert hat.

**Long**  
Als ganze Zahl. Im Beispiel `RequestedOrderCount` gibt das an, dass diese Anfrage Teil eines Stapels ist, der darauf zurückzuführen ist, dass der Kunde darum gebeten hat, vier seiner vergangenen Bestellungen einzusehen.

**Rekord**  
Eine Sammlung von Attributen. Sie müssen diese Attribute im Anforderungskontext deklarieren. Ein Richtlinienspeicher mit einem Schema muss diese Entität und die Attribute der Entität im Schema enthalten. In diesem Beispiel enthält der `NetworkInfo` Datensatz Informationen über die ursprüngliche IP-Adresse des Benutzers, die vom Client festgelegte Geolokalisierung dieser IP und die Verschlüsselung bei der Übertragung.

**EntityIdentifier**  
Ein Verweis auf eine Entität und Attribute, die im `entities` Element der Anfrage deklariert sind. In dem Beispiel wurde die Bestellung des Benutzers vom Mitarbeiter genehmigt`Bob`.

Um diesen Beispielkontext in der **DigitalPetStore**Beispiel-App zu testen, müssen Sie Ihre Anfrage`entities`, Ihr Policy-Store-Schema und die statische Richtlinie mit der Beschreibung **Customer Role — Get Order** aktualisieren.

## Ändern DigitalPetStore , um den Autorisierungskontext zu akzeptieren
<a name="authorization-context-example"></a>

Anfänglich **DigitalPetStore**handelt es sich nicht um einen sehr komplexen Richtlinienspeicher. Er enthält keine vorkonfigurierten Richtlinien oder Kontextattribute zur Unterstützung des von uns vorgestellten Kontextes. Um ein Beispiel für eine Autorisierungsanfrage mit diesen Kontextinformationen auszuwerten, nehmen Sie die folgenden Änderungen an Ihrem Richtlinienspeicher und Ihrer Autorisierungsanfrage vor. Kontextbeispiele mit Zugriffstoken-Informationen als Kontext finden Sie unter [Amazon Cognito Zugriffstoken zuordnen](cognito-map-token-to-schema.md#cognito-map-access-token) [und OIDC-Zugriffstoken](oidc-map-token-to-schema.md#oidc-map-access-token) zuordnen.

------
#### [ Schema ]

Wenden Sie die folgenden Aktualisierungen auf Ihr Policy-Store-Schema an, um die neuen Kontext-Attribute zu unterstützen. Aktualisieren Sie `GetOrder` `actions` wie folgt.

```
"GetOrder": {
  "memberOf": [],
  "appliesTo": {
    "resourceTypes": [
      "Order"
    ],
    "context": {
      "type": "Record",
      "attributes": {
        "AccountCodes": {
          "type": "Set",
          "required": true,
          "element": {
            "type": "Long"
          }
        },
        "approvedBy": {
          "name": "User",
          "required": true,
          "type": "Entity"
        },
        "MfaAuthorized": {
          "type": "Boolean",
          "required": true
        },
        "NetworkInfo": {
          "type": "NetworkInfo",
          "required": true
        },
        "RequestedOrderCount": {
          "type": "Long",
          "required": true
        },
        "UserAgent": {
          "required": true,
          "type": "String"
        }
      }
    },
    "principalTypes": [
      "User"
    ]
  }
}
```

Um auf den `NetworkInfo` in Ihrem Anforderungskontext genannten `record` Datentyp zu verweisen, erstellen Sie ein [CommonType-Konstrukt](https://docs.cedarpolicy.com/schema/schema.html#schema-commonTypes) in Ihrem Schema, indem Sie Ihrem Schema zuvor `actions` Folgendes hinzufügen. Ein `commonType` Konstrukt ist ein gemeinsam genutzter Satz von Attributen, den Sie auf verschiedene Entitäten anwenden können.

```
"commonTypes": {
  "NetworkInfo": {
    "attributes": {
      "IPAddress": {
        "type": "String",
        "required": true
      },
      "SSL": {
        "required": true,
        "type": "Boolean"
      },
      "Country": {
        "required": true,
        "type": "String"
      }
    },
    "type": "Record"
  }
},
```

------
#### [ Policy ]

Die folgende Richtlinie legt Bedingungen fest, die von jedem der bereitgestellten Kontextelemente erfüllt werden müssen. Sie baut auf der bestehenden statischen Richtlinie mit der Beschreibung **Customer Role — Get Order** auf. Diese Richtlinie verlangt zunächst nur, dass der Principal, der eine Anfrage stellt, der Eigentümer der Ressource ist.

```
permit (
    principal in DigitalPetStore::Role::"Customer",
    action in [DigitalPetStore::Action::"GetOrder"],
    resource
) when {
    principal == resource.owner &&
    context.AccountCodes.contains(111122223333) &&
    context.approvedBy in DigitalPetStore::Role::"Employee" &&
    context.MfaAuthorized == true &&
    context.NetworkInfo.Country like "*United States*" &&
    context.NetworkInfo.IPAddress like "192.0.2.*" &&
    context.NetworkInfo.SSL == true &&
    context.RequestedOrderCount <= 4 &&
    context.UserAgent like "*My UserAgent*"
};
```

Wir haben nun verlangt, dass die Anfrage zum Abrufen einer Bestellung die zusätzlichen Kontextbedingungen erfüllt, die wir der Anfrage hinzugefügt haben.

1. Der Benutzer muss sich mit MFA angemeldet haben.

1. Der Webbrowser des Benutzers `User-Agent` muss die Zeichenfolge `My UserAgent` enthalten.

1. Der Benutzer muss die Ansicht von 4 oder weniger Bestellungen angefordert haben.

1. Einer der Kontocodes des Benutzers muss sein`111122223333`.

1. Die IP-Adresse des Benutzers muss aus den Vereinigte Staaten stammen, er muss sich in einer verschlüsselten Sitzung befinden und seine IP-Adresse muss mit beginnen`192.0.2.`.

1. Ein Mitarbeiter muss seine Bestellung genehmigt haben. Im `entities` Element der Autorisierungsanfrage deklarieren wir einen Benutzer`Bob`, der die Rolle von hat`Employee`.

------
#### [ Request body ]

Nachdem Sie Ihren Richtlinienspeicher mit dem entsprechenden Schema und der entsprechenden Richtlinie konfiguriert haben, können Sie diese Autorisierungsanfrage dem API-Vorgang „Verified Permissions“ vorlegen [IsAuthorized](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_IsAuthorized.html). Beachten Sie, dass das `entities` Segment eine Definition von`Bob`, einem Benutzer mit der Rolle von, enthält`Employee`.

```
{
  "principal": {
    "entityType": "DigitalPetStore::User",
    "entityId": "Alice"
  },
  "action": {
    "actionType": "DigitalPetStore::Action",
    "actionId": "GetOrder"
  },
  "resource": {
    "entityType": "DigitalPetStore::Order",
    "entityId": "1234"
  },
  "context": {
    "contextMap": {
      "AccountCodes": {
        "set": [
          {"long": 111122223333},
          {"long": 444455556666},
          {"long": 123456789012}
        ]
      },
      "approvedBy": {
        "entityIdentifier": {
          "entityId": "Bob",
          "entityType": "DigitalPetStore::User"
        }
      },
      "MfaAuthorized": {
        "boolean": true
      },
      "NetworkInfo": {
        "record": {
          "Country": {"string": "United States of America"},
          "IPAddress": {"string": "192.0.2.178"},
          "SSL": {"boolean": true}
        }
      },
      "RequestedOrderCount":{
        "long": 4
      },
      "UserAgent": {
        "string": "My UserAgent 1.12"
      }
    }
  },
  "entities": {
    "entityList": [
      {
        "identifier": {
          "entityType": "DigitalPetStore::User",
          "entityId": "Alice"
        },
        "attributes": {
          "memberId": {
            "string": "801b87f2-1a5c-40b3-b580-eacad506d4e6"
          }
        },
        "parents": [
          {
            "entityType": "DigitalPetStore::Role",
            "entityId": "Customer"
          }
        ]
      },
      {
        "identifier": {
          "entityType": "DigitalPetStore::User",
          "entityId": "Bob"
        },
        "attributes": {
          "memberId": {
            "string": "49d9b81e-735d-429c-989d-93bec0bcfd8b"
          }
        },
        "parents": [
          {
            "entityType": "DigitalPetStore::Role",
            "entityId": "Employee"
          }
        ]
      },
      {
        "identifier": {
          "entityType": "DigitalPetStore::Order",
          "entityId": "1234"
        },
        "attributes": {
          "owner": {
            "entityIdentifier": {
              "entityType": "DigitalPetStore::User",
              "entityId": "Alice"
            }
          }
        },
        "parents": []
      }
     ]
   },
   "policyStoreId": "PSEXAMPLEabcdefg111111"
}
```

------