La autorización del cliente de aplicaciones consta de clases de permisos de ObjectGrid, mecanismos de autorización, un periodo de comprobación de permisos y un acceso sólo por parte de la autorización del creador.
Para eXtreme Scale, la autorización se basa en el objeto Subject y los permisos. El producto soporta dos tipos de mecanismos de autorización: Java Authentication and Authorization Service (JAAS) y la autorización personalizado.
eXtreme Scale soporta el almacenamiento en memoria caché de los resultados de la comprobación de permisos de correlación con finalidades de rendimiento. Sin este mecanismo, cuando se llama a un método que está en la lista de métodos para la clase de permiso en particular, el tiempo de ejecución llama al mecanismo de autorización configurado para autorizar el acceso. Con este período de comprobación de permisos establecido, el mecanismo de autorización se llama periódicamente en función del período de comprobación de permisos.Para ver una lista de métodos para cada clase de permiso, consulte Programación de autorización de cliente.
La información de autorización de permisos se basa en el objeto Subject. Cuando un cliente intenta acceder a los métodos, el tiempo de ejecución de eXtreme Scale consulta la memoria caché en función del objeto Subject. Si el objeto no se encuentra en la memoria caché, el tiempo de ejecución comprueba los permisos concedidos para este objeto Subject, y luego almacena los permisos en una memoria caché.
El período de comprobación de permisos debe definirse antes de inicializar ObjectGrid. El período de comprobación de permisos puede configurarse de dos modos:
<objectGrids>
<objectGrid name="secureClusterObjectGrid" securityEnabled="true"
authorizationMechanism="AUTHORIZATION_MECHANISM_JAAS"
permissionCheckPeriod="45">
<bean id="bean id="TransactionCallback"
className="com.ibm.websphere.samples.objectgrid.HeapTransactionCallback" />
...
</objectGrids>
/**
* Este método toma un único parámetro que indica con qué frecuencia
* desea comprobar el permiso utilizado para permitir un acceso de cliente. Si el
* parámetro es 0 cada llamada única get/put/update/remove/evict
* solicita al mecanismo de autorización, autorización JAAS o personalizada,
* comprobar si el objeto Subject actual tiene permiso. Esto podría ser
* muy costoso desde el punto de vista del rendimiento en función de
* la implementación de autorización, pero si necesita comprobar el
* mecanismo de autorización, establezca el parámetro en 0.
* De forma alternativa, si el parámetro es > 0, indica el número
* de segundos que tarda en almacenar en la memoria caché un conjunto de
permisos antes de volver al
* mecanismo de autorización para que los actualice. Este valor proporciona un
* mejor rendimiento, pero si los permisos del programa de fondo
* se cambian durante este tiempo, ObjectGrid puede
* permitir o denegar el acceso aunque el proveedor de seguridad
* del programa de fondo se haya modificado.
*
* @param period periodo de comprobación de servicio en segundos.
*/
void setPermissionCheckPeriod(int period);
La autorización de sólo acceso de creador garantiza que sólo el usuario (representado por los objetos Principal asociados a él) que inserta la entrada en la correlación ObjectGrid pueda acceder (leer, actualizar, invalidar y eliminar) a la entrada.
El modelo de autorización de la correlación ObjectGrid existente se basa en el tipo de acceso, no en las entradas de datos. En otras palabras, un usuario tiene un tipo determinado de acceso (leer, grabar, insertar, suprimir o invalidar) para todos los datos de la correlación o para ninguno. No obstante, eXtreme Scale no autoriza a los usuarios la entrada individual de los datos. Esta característica ofrece una nueva manera de autorizar a los usuarios las entradas de datos.
En un escenario donde diferentes usuarios pueden acceder a distintos conjuntos de datos, este modelo puede ser de utilidad. Cuando el usuario carga los datos del almacén persistente en las correlaciones ObjectGrid, el acceso puede autorizarse desde el almacén persistente. En este caso, no es necesario realizar otra autorización en la capa de correlación ObjectGrid. Sólo debe asegurarse de que la persona que carga los datos en la correlación pueda acceder a ella mediante la habilitación de la característica de sólo acceso de creador.
Puede configurar esta característica de dos modos:
Mediante un archivo XML:
<objectGrids>
<objectGrid name="secureClusterObjectGrid" securityEnabled="true"
accessByCreatorOnlyMode="supersede"
<bean id="TransactionCallback"
classname="com.ibm.websphere.samples.objectgrid.HeapTransactionCallback" />
...
</objectGrids>
A través de programa:
/**
* Establezca la modalidad de sólo acceso de creador.
* Si habilita esta modalidad se asegura de que sólo el usuario (representado
* por los principales asociados a éste), que inserta el registro en la correlación,
* pueda acceder (leer, actualizar, invalidar y eliminar) al registro.
* La modalidad de sólo acceso de creador puede inhabilitarse, o puede complementar
* el modelo de autorización ObjectGrid, o puede reemplazar el modelo de autorización
* ObjectGrid. El valor predeterminado es la modalidad inhabilitada:
* {@link SecurityConstants#ACCESS_BY_CREATOR_ONLY_DISABLED}.
* @see SecurityConstants#ACCESS_BY_CREATOR_ONLY_DISABLED
* @see SecurityConstants#ACCESS_BY_CREATOR_ONLY_COMPLEMENT
* @see SecurityConstants#ACCESS_BY_CREATOR_ONLY_SUPERSEDE
*
* @param accessByCreatorOnlyMode acceso mediante la modalidad de creador.
*
* @since WAS XD 6.1 FIX3
*/
void setAccessByCreatorOnlyMode(int accessByCreatorOnlyMode);
grant codebase "http://www.ibm.com/com/ibm/ws/objectgrid/security/PrivilegedAction"
Principal com.acme.PrincipalImpl "Manager1" {
permission com.ibm.websphere.objectgrid.security.MapPermission
"banking.account", "all"
};
grant codebase "http://www.ibm.com/com/ibm/ws/objectgrid/security/PrivilegedAction"
Principal com.acme.PrincipalImpl "Employee1" {
permission com.ibm.websphere.objectgrid.security.MapPermission
"banking.account", "read, insert"
};