Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Añadir contexto
El contexto es la información relevante para las decisiones políticas, pero no forma parte de la identidad del director, la acción o el recurso. Es posible que desee permitir una acción solo desde un conjunto de direcciones IP de origen o solo si el usuario ha iniciado sesión con MFA. Su aplicación tiene acceso a estos datos de sesión contextuales y debe rellenarlos para las solicitudes de autorización. Los datos de contexto de una solicitud de autorización de permisos verificados deben tener formato JSON en un elemento. contextMap
Los ejemplos que ilustran este contenido provienen de un almacén de políticas de muestra. Para continuar, cree el almacén de políticas de DigitalPetStoremuestra en su entorno de pruebas.
El siguiente objeto de contexto declara uno de cada tipo de datos de Cedar para una aplicación según el almacén de DigitalPetStorepolíticas de muestra.
"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"
}
}
}
}
Tipos de datos en el contexto de la autorización
- Booleano
-
Un binario true
o un false
valor. En el ejemplo, el valor booleano true
for MfaAuthenticated
indica que el cliente ha realizado una autenticación multifactorial antes de solicitar ver su pedido.
- Establezca
-
Colección de elementos contextuales. Los miembros del conjunto pueden ser todos del mismo tipo, como en este ejemplo, o de tipos diferentes, incluido un conjunto anidado. En el ejemplo, el cliente está asociado a 3 cuentas diferentes.
- Cadena
-
Secuencia de letras, números o símbolos, encerrados entre "
caracteres. En el ejemplo, la UserAgent
cadena representa el navegador que el cliente utilizó para solicitar ver su pedido.
- Largo
-
Un número entero. En el ejemplo, RequestedOrderCount
indica que esta solicitud forma parte de un lote que surgió cuando el cliente solicitó ver cuatro de sus pedidos anteriores.
- Registro
-
Colección de atributos. Debe declarar estos atributos en el contexto de la solicitud. Un almacén de políticas con un esquema debe incluir esta entidad y los atributos de la entidad en el esquema. En el ejemplo, el NetworkInfo
registro contiene información sobre la IP de origen del usuario, la geolocalización de esa IP determinada por el cliente y el cifrado en tránsito.
- EntityIdentifier
-
Una referencia a una entidad y a los atributos declarados en el entities
elemento de la solicitud. En el ejemplo, el empleado aprobó el pedido del usuarioBob
.
Para probar este contexto de ejemplo en la DigitalPetStoreaplicación de ejemplo, debes actualizar tu solicitudentities
, el esquema del almacén de políticas y la política estática con la descripción Customer Role: Get Order.
Modificar DigitalPetStore para aceptar el contexto de autorización
Inicialmente, no DigitalPetStorees un almacén de políticas muy complejo. No incluye políticas ni atributos de contexto preconfigurados para respaldar el contexto que hemos presentado. Para evaluar un ejemplo de solicitud de autorización con esta información contextual, realice las siguientes modificaciones en su almacén de políticas y en su solicitud de autorización.
- Schema
-
Aplique las siguientes actualizaciones al esquema del almacén de políticas para admitir los nuevos atributos de contexto. Actualice GetOrder
de actions
la siguiente manera.
"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"
]
}
}
Para hacer referencia al tipo de record
datos mencionado NetworkInfo
en el contexto de la solicitud, cree una construcción CommonType en el esquema de la siguiente manera. Una commonType
construcción es un conjunto compartido de atributos que se pueden aplicar a distintas entidades.
El editor de esquemas visuales de permisos verificados actualmente no admite commonType
construcciones. Al añadirlos al esquema, ya no podrá ver el esquema en modo visual.
"commonTypes": {
"NetworkInfo": {
"attributes": {
"IPAddress": {
"type": "String",
"required": true
},
"SSL": {
"required": true,
"type": "Boolean"
},
"Country": {
"required": true,
"type": "String"
}
},
"type": "Record"
}
}
- Policy
-
La siguiente política establece las condiciones que debe cumplir cada uno de los elementos de contexto proporcionados. Se basa en la política estática existente con la descripción Customer Role: Get Order. Inicialmente, esta política solo requiere que el principal que realiza una solicitud sea el propietario del recurso.
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"
};
Ahora exigimos que la solicitud de recuperación de un pedido cumpla con las condiciones de contexto adicionales que añadimos a la solicitud.
-
El usuario debe haber iniciado sesión con MFA.
-
El navegador web del usuario User-Agent
debe contener la cadenaMy UserAgent
.
-
El usuario debe haber solicitado ver 4 pedidos o menos.
-
Uno de los códigos de cuenta del usuario debe ser111122223333
.
-
La dirección IP del usuario debe tener su origen en los Estados Unidos, debe estar en una sesión cifrada y su dirección IP debe empezar por192.0.2.
.
-
Un empleado debe haber aprobado su pedido. En el entities
elemento de la solicitud de autorización, declararemos un usuario Bob
que tiene la función deEmployee
.
- Request body
-
Tras configurar el almacén de políticas con el esquema y la política adecuados, puede presentar esta solicitud de autorización a la operación de la API de permisos verificados IsAuthorized. Tenga en cuenta que el entities
segmento contiene una definición de Bob
un usuario con un rol 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"
}