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
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. Um dem nachzugehen, erstellen Sie den DigitalPetStoreBeispiel-Richtlinienspeicher in Ihrer Testumgebung.
Das folgende Kontextobjekt deklariert einen von jedem Cedar-Datentyp für eine Anwendung auf der Grundlage des DigitalPetStoreBeispielrichtlinienspeichers.
"context": {
"contextMap": {
"MfaAuthorized": {
"boolean": true
},
"AccountCodes": {
"set": [
{
"long": 111122223333
},
{
"long": 444455556666
},
{
"long": 123456789012
}
]
},
"UserAgent": {
"string": "My UserAgent 1.12"
},
"RequestedOrderCount": {
"long": 4
},
"NetworkInfo": {
"record": {
"IPAddress": {
"string": "192.0.2.178"
},
"Country": {
"string": "United States of America"
},
"SSL": {
"boolean": true
}
}
},
"approvedBy": {
"entityIdentifier": {
"entityId": "Bob",
"entityType": "DigitalPetStore::User"
}
}
}
}
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.
- String
-
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 genehmigtBob
.
Um diesen Beispielkontext in der DigitalPetStoreBeispiel-App zu testen, müssen Sie Ihre Anfrageentities
, Ihr Policy-Store-Schema und die statische Richtlinie mit der Beschreibung Customer Role — Get Order aktualisieren.
Ändern DigitalPetStore , um den Autorisierungskontext zu akzeptieren
Anfänglich DigitalPetStorehandelt 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 unterZugriffstoken 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": {
"UserAgent": {
"required": true,
"type": "String"
},
"approvedBy": {
"name": "User",
"required": true,
"type": "Entity"
},
"AccountCodes": {
"type": "Set",
"required": true,
"element": {
"type": "Long"
}
},
"RequestedOrderCount": {
"type": "Long",
"required": true
},
"MfaAuthorized": {
"type": "Boolean",
"required": true
}
}
},
"principalTypes": [
"User"
]
}
}
Um auf den NetworkInfo
in Ihrem Anforderungskontext genannten record
Datentyp zu verweisen, erstellen Sie in Ihrem Schema wie folgt ein CommonType-Konstrukt. Ein commonType
Konstrukt ist ein gemeinsam genutzter Satz von Attributen, den Sie auf verschiedene Entitäten anwenden können.
Der visuelle Schema-Editor Verified Permissions unterstützt derzeit keine commonType
Konstrukte. Wenn Sie sie zu Ihrem Schema hinzufügen, können Sie Ihr Schema nicht mehr im visuellen Modus anzeigen.
"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.MfaAuthorized == true &&
context.UserAgent like "*My UserAgent*" &&
context.RequestedOrderCount <= 4 &&
context.AccountCodes.contains(111122223333) &&
context.NetworkInfo.Country like "*United States*" &&
context.NetworkInfo.SSL == true &&
context.NetworkInfo.IPAddress like "192.0.2.*" &&
context.approvedBy in DigitalPetStore::Role::"Employee"
};
Wir haben nun verlangt, dass die Anfrage zum Abrufen einer Bestellung die zusätzlichen Kontextbedingungen erfüllt, die wir der Anfrage hinzugefügt haben.
-
Der Benutzer muss sich mit MFA angemeldet haben.
-
Der Webbrowser des Benutzers User-Agent
muss die Zeichenfolge My UserAgent
enthalten.
-
Der Benutzer muss die Ansicht von 4 oder weniger Bestellungen angefordert haben.
-
Einer der Kontocodes des Benutzers muss sein111122223333
.
-
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 beginnen192.0.2.
.
-
Ein Mitarbeiter muss seine Bestellung genehmigt haben. Im entities
Element der Autorisierungsanfrage deklarieren wir einen Bob
Benutzer mit der Rolle vonEmployee
.
- 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. Beachten Sie, dass das entities
Segment eine Definition vonBob
, einem Benutzer mit der Rolle von, enthältEmployee
.
{
"principal": {
"entityType": "DigitalPetStore::User",
"entityId": "Alice"
},
"action": {
"actionType": "DigitalPetStore::Action",
"actionId": "GetOrder"
},
"resource": {
"entityType": "DigitalPetStore::Order",
"entityId": "1234"
},
"context": {
"contextMap": {
"MfaAuthorized": {
"boolean": true
},
"UserAgent": {
"string": "My UserAgent 1.12"
},
"RequestedOrderCount":{
"long": 4
},
"AccountCodes": {
"set": [
{"long": 111122223333},
{"long": 444455556666},
{"long": 123456789012}
]
},
"NetworkInfo": {
"record": {
"IPAddress": {"string": "192.0.2.178"},
"Country": {"string": "United States of America"},
"SSL": {"boolean": true}
}
},
"approvedBy": {
"entityIdentifier": {
"entityId": "Bob",
"entityType": "DigitalPetStore::User"
}
}
}
},
"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"
}