Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Ajouter du contexte
Le contexte est l'information pertinente pour les décisions politiques, mais qui ne fait pas partie de l'identité de votre principal, de votre action ou de votre ressource. Les demandes de jetons d'accès sont contextuelles. Vous souhaiterez peut-être autoriser une action uniquement à partir d'un ensemble d'adresses IP sources, ou uniquement si votre utilisateur s'est connecté avecMFA. Votre application a accès à ces données de session contextuelles et doit les renseigner pour répondre aux demandes d'autorisation. Les données contextuelles d'une demande d'autorisation d'autorisations vérifiées doivent être JSON formatées dans un contextMap
élément.
Les exemples illustrant ce contenu proviennent d'un exemple de magasin de politiques. Pour suivre, créez le magasin DigitalPetStored'exemples de règles dans votre environnement de test.
L'objet de contexte suivant déclare un type de données Cedar pour chaque type de données pour une application en fonction de l'exemple de magasin DigitalPetStorede politiques.
"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"
}
}
}
}
Types de données dans le contexte des autorisations
- Booléen
-
Un binaire true
ou une false
valeur. Dans l'exemple, la valeur booléenne de true
for MfaAuthenticated
indique que le client a effectué une authentification multifactorielle avant de demander à consulter sa commande.
- Définir
-
Un ensemble d'éléments contextuels. Les membres de l'ensemble peuvent être tous du même type, comme dans cet exemple, ou de types différents, y compris un ensemble imbriqué. Dans l'exemple, le client est associé à 3 comptes différents.
- Chaîne
-
Séquence de lettres, de chiffres ou de symboles entourée de "
caractères. Dans l'exemple, la UserAgent
chaîne représente le navigateur que le client a utilisé pour demander à consulter sa commande.
- Long
-
Un entier. Dans l'exemple, cela RequestedOrderCount
indique que cette demande fait partie d'un lot résultant du fait que le client a demandé à consulter quatre de ses commandes passées.
- Enregistrer
-
Une collection d'attributs. Vous devez déclarer ces attributs dans le contexte de la demande. Un magasin de politiques doté d'un schéma doit inclure cette entité et ses attributs dans le schéma. Dans l'exemple, l'NetworkInfo
enregistrement contient des informations sur l'adresse IP d'origine de l'utilisateur, la géolocalisation de cette adresse IP telle que déterminée par le client et le chiffrement en cours de transit.
- EntityIdentifier
-
Référence à une entité et à des attributs déclarés dans l'entities
élément de la demande. Dans l'exemple, la commande de l'utilisateur a été approuvée par l'employéBob
.
Pour tester cet exemple de contexte dans l'exemple d'DigitalPetStoreapplication, vous devez mettre à jour votre demandeentities
, le schéma de votre magasin de politiques et la politique statique avec la description Customer Role - Get Order.
Modifier DigitalPetStore pour accepter le contexte d'autorisation
Au départ, DigitalPetStorece n'est pas un magasin de politiques très complexe. Il n'inclut aucune politique ou attribut de contexte préconfiguré pour prendre en charge le contexte que nous avons présenté. Pour évaluer un exemple de demande d'autorisation avec ces informations contextuelles, apportez les modifications suivantes à votre magasin de politiques et à votre demande d'autorisation. Pour des exemples de contexte avec les informations du jeton d'accès comme contexte, voirCartographie des jetons d'accès.
- Schema
-
Appliquez les mises à jour suivantes au schéma de votre magasin de politiques pour prendre en charge les nouveaux attributs de contexte. Effectuez GetOrder
la mise à jour actions
comme suit.
"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"
]
}
}
Pour référencer le type de record
données nommé NetworkInfo
dans le contexte de votre demande, créez une commonTypeconstruction dans votre schéma comme suit. Une commonType
construction est un ensemble partagé d'attributs que vous pouvez appliquer à différentes entités.
L'éditeur de schéma visuel Verified Permissions ne prend actuellement pas en charge commonType
les constructions. Lorsque vous les ajoutez à votre schéma, vous ne pouvez plus le visualiser en mode visuel.
"commonTypes": {
"NetworkInfo": {
"attributes": {
"IPAddress": {
"type": "String",
"required": true
},
"SSL": {
"required": true,
"type": "Boolean"
},
"Country": {
"required": true,
"type": "String"
}
},
"type": "Record"
}
}
- Policy
-
La politique suivante définit les conditions qui doivent être remplies par chacun des éléments de contexte fournis. Il s'appuie sur la politique statique existante avec la description Customer Role - Get Order. Au départ, cette politique exige uniquement que le principal qui fait une demande soit le propriétaire de la ressource.
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"
};
Nous avons maintenant exigé que la demande de récupération d'une commande réponde aux conditions contextuelles supplémentaires que nous avons ajoutées à la demande.
-
L'utilisateur doit s'être connecté avecMFA.
-
Le navigateur Web de l'utilisateur User-Agent
doit contenir la chaîneMy UserAgent
.
-
L'utilisateur doit avoir demandé à consulter 4 commandes ou moins.
-
L'un des codes de compte de l'utilisateur doit être111122223333
.
-
L'adresse IP de l'utilisateur doit provenir des États-Unis d'Amérique, sa session doit être cryptée et son adresse IP doit commencer par. 192.0.2.
-
Un employé doit avoir approuvé sa commande. Dans l'entities
élément de la demande d'autorisation, nous déclarerons un utilisateur Bob
ayant le rôle deEmployee
.
- Request body
-
Après avoir configuré votre magasin de politiques avec le schéma et la politique appropriés, vous pouvez présenter cette demande d'autorisation à l'APIopération Autorisations vérifiées IsAuthorized. Notez que le entities
segment contient une définition deBob
, un utilisateur avec un rôle deEmployee
.
{
"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"
}