Primeras Ideas para un Motor de Reglas de Claims

Published on Author lopezLeave a comment

Estoy bucando aplicaciones para los lenguajes de scripting que fui armando. Quiero usar AjLang, el núcleo de AjSharp, escrito en C#. Un caso de uso podría ser un motor de reglas de claims. Para que se entienda lo que tengo en mente, relativo a la seguridad federada, ver:

The Role of the Claims Engine
The Role of the Claim Rule Language
The Role of Claim Rules
The Role of the Claims Pipeline
The Role of Claims

Dado un conjunto de claims de entrada, el sistema podría producir un conjunto de claims de salida, usando reglas definidas por el usuario. Una regla podría escribirse en un lenguaje como:

rule RuleEmail
   description “….”
when
   claim cmail
   cmail in InputClaims
   cmail.Type == “email” 
   cmail.Value.EndsWith(
“@acme.com”)
then
   claim cname = new Claim(…. )
   // more cname processing, maybe extracting a value from email
   OutputClaims.Add(cname)
end rule

Algo como lo que ya tengo en mi ejemplo https://github.com/ajlopez/AjRools/blob/master/Src/AjRools.Expert/AjRools.Expert.Tests/Files/SimpleRule.txt pero más orientado a la sintaxis de C# (vean que en el ejemplo de arriba uso el nativo .EndsWith para un string).

Si hubiera omitido el “cmail in InputClaims”, el claim sería buscado en todos los conjuntos de claims que se hayan declarado.

Un item adicional: tener una interfaz web para explorar y editar reglas.

Las reglas se ejecutarían en un orden. Podría tener conjuntos de reglas, para agrupar las que tienen que ser ejecutadas en un momento del proceso. Por ejemplo, tener un conjunto de reglas a aplicar cuando llegue un conjunto de claims provisto por tal Identity Provider, como Windows Live, Yahoo, etc. O un conjunto de reglas a aplicar por Relying Party, cada uno siendo una application: el sistem contable, el sistema de recursos humanos, finanzas, etc..

En la parte “then”, las funciones adicionales serían invocadas. Estas funciones podrían ser agregadas por el desarrollador en el ambiente del motor de reglas, posiblemente cargando una DLL provista por él mismo. De esta manera, las acciones disponibles se podrían extender por código. Habría un conjunto de acciones inicial, como crear un nuevo claim. La parte “when” tiene predicados (funciones que dan verdadero o false) que también podrían ser extendidos por código. Predicados y acciones que podrían estar desde el principio: comparar una propiedad con un valor, crear un nuevo claim, cambiar una propiedad de un claim u objeto, agregar un claim a un conjunto existente, como el de InputClaims, OutputClaims o cualquier otro definido por el programador.

Algo para decidir: ¿qué pasa si hay DOS o más claims que satisfacen una cláusula when? ¿debería la regla dispararse una sola vez? ¿o una vez por cada claim disponible? Recuerdo el operador de corten en Prolog, pero me imagino que debe haber algo más simple. Tendré que explorar los casos de uso.

No tengo tiempo asignado para esto.

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

Leave a Reply

Your email address will not be published. Required fields are marked *