A autorização do cliente do aplicativo consiste de classes de permissão do ObjectGrid, de mecanismos de autorização, de um período de verificação de permissão e de autorização de acesso apenas pelo criador.
Para o eXtreme Scale, a autorização se baseia no objeto Subject e nas permissões. O produto suporta dois tipos de mecanismos de autorização: Java Authentication and Authorization Service (JAAS) e autorização customizada.
O eXtreme Scale suporta armazenamento em cache dos resultados da verificação de permissão de mapa por motivo de desempenho. Sem este mecanismo, quando um método que está na lista de métodos para sua classe de permissão específica é chamado, o tempo de execução chama o mecanismo de autorização configurado para autorizar o acesso. Com este período de verificação de permissão configurado, o mecanismo de autorização é chamado periodicamente com base no período de verificação de permissão. Para obter uma lista de métodos para cada classe de permissão, consulte o Programação de Autorização de Cliente.
As informações de autorização da permissão são baseadas no objeto Subject. Quando um cliente tenta acessar os métodos, o tempo de execução do eXtreme Scale consulta o cache com base no objeto Subject. Se o objeto não puder ser localizado no cache, o tempo de execução verifica as permissões concedidas para este objeto Subject, e, então, armazena as permissões em um cache.
O período de verificação de permissão deve ser definido antes da inicialização do ObjectGrid. O período de verificação de permissão pode ser configurado de duas maneiras:
<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>
/**
* This method takes a single parameter indicating how often you
* want to check the permission used to allow a client access. If the
* parameter is 0 then every single get/put/update/remove/evict call
* asks the authorization mechanism, either JAAS authorization or custom
* authorization, to check if the current subject has permission. This might be
* prohibitively expensive from a performance point of view depending on
* the authorization implementation, but if you need to have ever call check the
* authorization mechanism, then set the parameter to 0.
* Alternatively, if the parameter is > 0 then it indicates the number
* of seconds to cache a set of permissions before returning to
* the authorization mechanism to refresh them. This value provides much
* better performance, but if the back-end
* permissions are changed during this time then the ObjectGrid can
* allow or prevent access even though the back-end security
* provider was modified.
*
* @param period the permission check period in seconds.
*/
void setPermissionCheckPeriod(int period);
A autorização de acesso apenas pelo criador garante que apenas o usuário (representado pelos objetos Principal associados a ele) que insere a entidade no mapa ObjectGrid possa acessar (ler, atualizar, invalidar e remover tal entrada.
O modelo existente de autorização do mapa do ObjectGrid é baseado no tipo de acesso mas não em entradas de dados. Em outras palavras, um usuário possui um tipo de acesso específico, tal como read, write, insert, delete ou invalidate, para todo os dados no mapa ou em nenhum dos dados. Entretanto, o eXtreme Scale não autoriza usuários para a entrada de dados individual. Este recurso oferece uma nova maneira de autorizar usuários para entradas de dados.
Em um cenário onde usuários diferentes acessam diferentes conjuntos de dados, este modelo pode ser útil. Quando o usuário carrega dados do armazenamento persistente nos mapas do ObjectGrid, o acesso pode ser autorizado pelo armazenamento persistente. Neste caso, não há necessidade de outra autorização na camada do mapa do ObjectGrid. É necessário apenas garantir que a pessoa que carrega os dados no mapa possa acessá-lo, permitindo o recurso de acesso apenas pelo criador.
É possível configurar o modo de acesso apenas pelo criador de duas maneiras:
Pelo arquivo XML:
<objectGrids>
<objectGrid name="secureClusterObjectGrid" securityEnabled="true"
accessByCreatorOnlyMode="supersede"
<bean id="TransactionCallback"
classname="com.ibm.websphere.samples.objectgrid.HeapTransactionCallback" />
...
</objectGrids>
Programaticamente:
/**
* Set the "access by creator only" mode.
* Enabling "access by creator only" mode ensures that only the user (represented
* by the Principals associated with it), who inserts the record into the map,
* can access (read, update, invalidate, and remove) the record.
* The "access by creator only" mode can be disabled, or can complement the
* ObjectGrid authorization model, or it can supersede the ObjectGrid
* authorization model. The default value is disabled:
* {@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 the access by creator mode.
*
* @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"
};