Tras autenticar un cliente, como en el paso anterior, puede proporcionar privilegios de seguridad a través de mecanismos de autorización de eXtreme Scale.
Acerca de esta tarea
El paso anterior de esta guía de aprendizaje ha demostrado cómo habilitar la autenticación en una cuadrícula de
eXtreme Scale. Como resultado, un cliente no autenticado se puede conectar al servidor y enviar solicitudes al sistema. No obstante, cada cliente autenticado tiene el mismo permiso o privilegios que el servidor, como por ejemplo, la lectura, la grabación o la supresión de datos que se almacenan en las correlaciones de ObjectGrid. Los clientes también pueden emitir cualquier tipo de consulta. Esta sección demuestra cómo utilizar la autorización de
eXtreme Scale para otorgar distintos privilegios variables de usuarios autenticados.
De forma parecida a muchos otros sistemas, eXtreme Scale adopta un mecanismo de autorización basado en permisos. WebSphere eXtreme
Scale tiene distintas categorías de permisos representadas por diferentes clases de permisos. Este tema muestra MapPermission.
Para ver la categoría completa de permisos, consulte Programación de autorización de cliente.
En
WebSphere eXtreme
Scale, la clase com.ibm.websphere.objectgrid.security.MapPermission
representa permisos para los recursos de
eXtreme Scale, en particular los métodos de las interfaces
ObjectMap o JavaMap.
WebSphere eXtreme
Scale define las siguientes series de permiso para acceder a los métodos de ObjectMap y
JavaMap:
- leer: otorga permiso para leer los datos de la correlación.
- grabar: otorga permiso para actualizar los datos de la correlación.
- insertar: otorga permiso para insertar los datos en la correlación.
- eliminar: otorga permiso para eliminar los datos de la correlación.
- invalidar: otorga permiso para invalidar los datos de la correlación.
- todos: otorga todos los permisos anteriores: leer, grabar, insertar, eliminar e
invalidar.
La autorización tiene lugar cuando un cliente llama a un método de
ObjectMap o JavaMap. El tiempo de ejecución de eXtreme Scale comprueba los distintos permisos de correlación para los métodos diferentes. Si los permisos requeridos no se conceden al cliente, se
produce una excepción AccessControlException.
Esta guía de aprendizaje muestra cómo utilizar la autorización Java Authentication
and Authorization Service (JAAS) para otorgar accesos a correlaciones de autorizaciones para usuarios distintos.
- Habilitación de la autorización de eXtreme Scale
Para habilitar la autorización en ObjectGrid, debe establecer true como valor del atributo securityEnabled para ese ObjectGrid determinado en el archivo XML. La habilitación de la seguridad en el ObjectGrid significa que se habilita la autorización. Utilice los siguientes mandatos para crear un nuevo archivo XML de ObjectGrid con la seguridad habilitada.- Vaya al directorio xml.
cd objectgridRoot/xml
- Copie el archivo SimpleApp.xml en el archivo SecureSimpleApp.xml.
cp SimpleApp.xml SecureSimpleApp.xml
- Abra el archivo SecureSimpleApp.xml y añada securityEnabled="true" en el nivel de ObjectGrid tal como se muestra en el XML siguiente:
<?xml version="1.0" encoding="UTF-8"?>
<objectGridConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://ibm.com/ws/objectgrid/config ../objectGrid.xsd"
xmlns="http://ibm.com/ws/objectgrid/config">
<objectGrids>
<objectGrid name="accounting" securityEnabled="true">
<backingMap name="customer" readOnly="false" copyKey="true"/>
</objectGrid>
</objectGrids>
</objectGridConfig>
- Definición de la política de autorización.
En la sección de autenticación previa al cliente, ha creado tres usuarios en el almacén de claves: cashier, manager y administrator.
En este ejemplo, el usuario "cashier" sólo tiene permisos de lectura para todas las correlaciones y que el usuario "manager" tiene todos los permisos. La autorización JAAS se utiliza en este ejemplo. La autorización JAAS utiliza el archivo de política de autorización para otorgar permisos a principales.
El siguiente archivo og_auth.policy se define en el directorio de seguridad: og_auth.policy
grant codebase "http://www.ibm.com/com/ibm/ws/objectgrid/security/PrivilegedAction"
principal javax.security.auth.x500.X500Principal "CN=cashier,O=acme,OU=OGSample" {
permission com.ibm.websphere.objectgrid.security.MapPermission "accounting.*", "read ";
};
grant codebase "http://www.ibm.com/com/ibm/ws/objectgrid/security/PrivilegedAction"
principal javax.security.auth.x500.X500Principal "CN=manager,O=acme,OU=OGSample" {
permission com.ibm.websphere.objectgrid.security.MapPermission "accounting.*", "all";
};
Nota:
- El código base codebase "http://www.ibm.com/com/ibm/ws/objectgrid/security/PrivilegedAction" es un URL especialmente reservado para ObjectGrid. Todos los permisos de ObjectGrid otorgados a principales deben utilizar esta base de código especial.
- La primera sentencia grant otorga permiso de correlación de "lectura" al principal
"CN=cashier,O=acme,OU=OGSample", de modo que el usuario cashier sólo tiene permiso de lectura de correlación para todas las correlaciones en el ObjectGrid accounting.
- La segunda sentencia grant otorga "todos" los permisos de correlación al principal
"CN=manager,O=acme,OU=OGSample", de modo que el usuario manager tiene todos los permisos para las correlaciones en el ObjectGrid accounting.
Ahora puede iniciar un servidor con una política de autorización.
El archivo de política de autorización JAAS se puede establecer utilizando la propiedad -D estándar: -Djava.security.auth.policy=../security/og_auth.policy
- Ejecute la aplicación.
Después de crear los archivos anteriores, puede ejecutar la aplicación.
Utilice los siguientes mandatos para iniciar el servidor de catálogo.
Para obtener más información sobre cómo iniciar el servicio de catálogo, consulte Inicio de un servicio de catálogo autónomo.
Tenga en cuenta las siguientes diferencias del mandato de inicio de servidor de contenedor anterior:
- Utilice el archivo SecureSimpleApp.xml en lugar del archivo SimpleApp.xml.
- Añada otro argumento -Djava.security.auth.policy para establecer el archivo de política de autorización de JAAS para el proceso de servidor de contenedor.
Utilice el mismo mandato que en el paso anterior de la guía de aprendizaje:
- Desplácese al directorio bin.
- java -classpath ../lib/objectgrid.jar;../applib/sec_sample.jar
com.ibm.websphere.objectgrid.security.sample.guide.SecureSimpleApp
../security/client.properties manager manager1
Como el usuario
"manager" tiene todos los permisos para las correlaciones del accounting ObjectGrid,
la aplicación se ejecuta correctamente.
Ahora, en lugar de utilizar el usuario "manager",
utilice el usuario "cashier" para iniciar la aplicación cliente.
- Desplácese al directorio bin.
- java -classpath ../lib/objectgrid.jar;../applib/sec_sample.jar
com.ibm.ws.objectgrid.security.sample.guide.SecureSimpleApp ../security/client.properties
cashier cashier1
Se genera la siguiente excepción:
Excepción en la hebra "P=387313:O=0:CT" com.ibm.websphere.objectgrid.TransactionException:
rolling back transaction, see caused by exception
at com.ibm.ws.objectgrid.SessionImpl.rollbackPMapChanges(SessionImpl.java:1422)
at com.ibm.ws.objectgrid.SessionImpl.commit(SessionImpl.java:1149)
at com.ibm.ws.objectgrid.SessionImpl.mapPostInvoke(SessionImpl.java:2260)
at com.ibm.ws.objectgrid.ObjectMapImpl.update(ObjectMapImpl.java:1062)
at com.ibm.ws.objectgrid.security.sample.guide.SimpleApp.run(SimpleApp.java:42)
at com.ibm.ws.objectgrid.security.sample.guide.SecureSimpleApp.main(SecureSimpleApp.java:27)
Caused by: com.ibm.websphere.objectgrid.ClientServerTransactionCallbackException:
Client Services - received exception from remote server:
com.ibm.websphere.objectgrid.TransactionException: transaction rolled back,
see caused by Throwable
at com.ibm.ws.objectgrid.client.RemoteTransactionCallbackImpl.processReadWriteResponse(
RemoteTransactionCallbackImpl.java:1399)
at com.ibm.ws.objectgrid.client.RemoteTransactionCallbackImpl.processReadWriteRequestAndResponse(
RemoteTransactionCallbackImpl.java:2333)
at com.ibm.ws.objectgrid.client.RemoteTransactionCallbackImpl.commit(RemoteTransactionCallbackImpl.java:557)
at com.ibm.ws.objectgrid.SessionImpl.commit(SessionImpl.java:1079)
... 4 más
Caused by: com.ibm.websphere.objectgrid.TransactionException: transaction rolled back, see caused by Throwable
at com.ibm.ws.objectgrid.ServerCoreEventProcessor.processLogSequence(ServerCoreEventProcessor.java:1133)
at com.ibm.ws.objectgrid.ServerCoreEventProcessor.processReadWriteTransactionRequest
(ServerCoreEventProcessor.java:910)
at com.ibm.ws.objectgrid.ServerCoreEventProcessor.processClientServerRequest(ServerCoreEventProcessor.java:1285)
at com.ibm.ws.objectgrid.ShardImpl.processMessage(ShardImpl.java:515)
at com.ibm.ws.objectgrid.partition.IDLShardPOA._invoke(IDLShardPOA.java:154)
at com.ibm.CORBA.poa.POAServerDelegate.dispatchToServant(POAServerDelegate.java:396)
at com.ibm.CORBA.poa.POAServerDelegate.internalDispatch(POAServerDelegate.java:331)
at com.ibm.CORBA.poa.POAServerDelegate.dispatch(POAServerDelegate.java:253)
at com.ibm.rmi.iiop.ORB.process(ORB.java:503)
at com.ibm.CORBA.iiop.ORB.process(ORB.java:1553)
at com.ibm.rmi.iiop.Connection.respondTo(Connection.java:2680)
at com.ibm.rmi.iiop.Connection.doWork(Connection.java:2554)
at com.ibm.rmi.iiop.WorkUnitImpl.doWork(WorkUnitImpl.java:62)
at com.ibm.rmi.iiop.WorkerThread.run(ThreadPoolImpl.java:202)
at java.lang.Thread.run(Thread.java:803)
Caused by: java.security.AccessControlException: Access denied (
com.ibm.websphere.objectgrid.security.MapPermission accounting.customer write)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:155)
at com.ibm.ws.objectgrid.security.MapPermissionCheckAction.run(MapPermissionCheckAction.java:141)
at java.security.AccessController.doPrivileged(AccessController.java:275)
at javax.security.auth.Subject.doAsPrivileged(Subject.java:727)
at com.ibm.ws.objectgrid.security.MapAuthorizer$1.run(MapAuthorizer.java:76)
at java.security.AccessController.doPrivileged(AccessController.java:242)
at com.ibm.ws.objectgrid.security.MapAuthorizer.check(MapAuthorizer.java:66)
at com.ibm.ws.objectgrid.security.SecuredObjectMapImpl.checkMapAuthorization(SecuredObjectMapImpl.java:429)
at com.ibm.ws.objectgrid.security.SecuredObjectMapImpl.update(SecuredObjectMapImpl.java:490)
at com.ibm.ws.objectgrid.SessionImpl.processLogSequence(SessionImpl.java:1913)
at com.ibm.ws.objectgrid.SessionImpl.processLogSequence(SessionImpl.java:1805)
at com.ibm.ws.objectgrid.ServerCoreEventProcessor.processLogSequence(ServerCoreEventProcessor.java:1011)
... 14 más
Esta excepción se produce porque el usuario "cashier" no tiene permiso de grabación, y por ello no puede actualizar el cliente de correlación.
Ahora el sistema da soporte a la autorización. Puede definir políticas de autorización para otorgar distintos permisos a usuarios diferentes. Para obtener información sobre la autorización, consulte Autorización de cliente de aplicaciones.
Qué hacer a continuación
Complete el siguiente paso de la guía de aprendizaje. Consulte
Guía de aprendizaje de seguridad de Java SE - Paso 6.