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.
Hinzufügen von Kontext
Kontext sind die Informationen, die für Richtlinienentscheidungen relevant sind, aber nicht Teil der Identität Ihres Prinzipals, Ihrer Aktion oder Ihrer Ressource sind. Möglicherweise möchten Sie eine Aktion nur von einer Reihe von Quell-IP-Adressen zulassen oder nur, wenn sich Ihr Benutzer mit MFA angemeldet hat. Ihre Anwendung hat Zugriff auf diese kontextbezogenen Sitzungsdaten und muss sie für Autorisierungsanforderungen ausfüllen. Die Kontextdaten in einer Autorisierungsanforderung für verifizierte Berechtigungen müssen in einem -contextMap
Element JSON-formatiert sein.
Die Beispiele, die diesen Inhalt veranschaulichen, stammen aus einem Beispielrichtlinienspeicher . Erstellen Sie als Nächstes den DigitalPetStore Beispielrichtlinienspeicher in Ihrer Testumgebung.
Das folgende Kontextobjekt deklariert einen der einzelnen Cedar-Datentypen für eine Anwendung basierend auf dem DigitalPetStore Beispielrichtlinienspeicher.
"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. Im Beispiel MfaAuthenticated
gibt der boolesche Wert true
für an, dass der Kunde eine Multi-Faktor-Authentifizierung durchgeführt hat, bevor er auffordert, seine Bestellung anzuzeigen.
- Einstellen
-
Eine Sammlung von Kontextelementen. Satzmitglieder können denselben Typ haben, wie in diesem Beispiel, oder von verschiedenen Typen, einschließlich eines verschachtelten Satzes. Im Beispiel ist der Kunde mit 3 verschiedenen Konten verknüpft.
- String
-
Eine Folge von Buchstaben, Zahlen oder Symbolen, eingeschlossen in "
Zeichen. Im Beispiel stellt die UserAgent
Zeichenfolge den Browser dar, den der Kunde zum Anzeigen seiner Bestellung verwendet hat.
- Long
-
Als ganze Zahl. In dem Beispiel RequestedOrderCount
zeigt die an, dass diese Anfrage Teil eines Batches ist, der dazu geführt hat, dass der Kunde vier seiner früheren Bestellungen anfragt.
- Datensatz
-
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. Im Beispiel enthält der NetworkInfo
Datensatz Informationen über die ursprüngliche IP des Benutzers, die vom Client festgelegte Geolokalisierung dieser IP und die Verschlüsselung während der Übertragung.
- EntityIdentifier
-
Ein Verweis auf eine Entität und Attribute, die im -entities
Element der Anforderung deklariert sind. Im Beispiel wurde die Bestellung des Benutzers vom Mitarbeiter genehmigtBob
.
Um diesen Beispielkontext in der Beispiel-DigitalPetStoreApp zu testen, müssen Sie Ihre Anfrage entities
, Ihr Richtlinienspeicherschema und die statische Richtlinie mit der Beschreibung Customer Role - Get Order aktualisieren.
Ändern, DigitalPetStore um Autorisierungskontext zu akzeptieren
Anfänglich DigitalPetStore ist kein sehr komplexer Richtlinienspeicher. Es enthält keine vorkonfigurierten Richtlinien oder Kontextattribute zur Unterstützung des von uns vorgestellten Kontextes. Um eine Beispielautorisierungsanforderung mit diesen Kontextinformationen auszuwerten, nehmen Sie die folgenden Änderungen an Ihrem Richtlinienspeicher und Ihrer Autorisierungsanforderung vor.
- Schema
-
Wenden Sie die folgenden Aktualisierungen auf Ihr Richtlinienspeicherschema an, um die neuen Kontextattribute zu unterstützen. Aktualisieren Sie GetOrder
in 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 record
Datentyp namens NetworkInfo
in Ihrem Anforderungskontext zu verweisen, erstellen Sie wie folgt ein commonType-Konstrukt in Ihrem Schema. Ein commonType
Konstrukt ist ein gemeinsam genutzter Satz von Attributen, die Sie auf verschiedene Entitäten anwenden können.
Der visuelle Schemaeditor für Verified Permissions unterstützt derzeit keine commonType
Konstrukte. Wenn Sie sie 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 richtet Bedingungen ein, die von jedem der bereitgestellten Kontextelemente erfüllt werden müssen. Es baut auf der vorhandenen statischen Richtlinie mit der Beschreibung Customer Role – Get Order auf. Diese Richtlinie erfordert zunächst nur, dass der Prinzipal, der eine Anforderung 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 Anforderung zum Abrufen einer Bestellung die zusätzlichen Kontextbedingungen erfüllt, die wir der Anforderung hinzugefügt haben.
-
Der Benutzer muss sich mit MFA angemeldet haben.
-
Der Webbrowser des Benutzers User-Agent
muss die Zeichenfolge enthaltenMy UserAgent
.
-
Der Benutzer muss aufgefordert haben, 4 oder weniger Bestellungen anzuzeigen.
-
Einer der Kontocodes des Benutzers muss sein111122223333
.
-
Die IP-Adresse des Benutzers muss aus den USA 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 Autorisierungsanforderung deklarieren wir einen Benutzer Bob
mit der Rolle Employee
.
- Request body
-
Nachdem Sie Ihren Richtlinienspeicher mit dem entsprechenden Schema und der entsprechenden Richtlinie konfiguriert haben, können Sie diese Autorisierungsanforderung der API-Operation Verified Permissions vorlegenIsAuthorized. Beachten Sie, dass das entities
Segment eine Definition von Bob
, einem Benutzer mit der Rolle , 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"
}