Autorização do Aplicativo Cliente

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.

Classes de permissão do ObjectGrid

A autorização é baseada em permissões. A seguir há quatro tipos diferentes de classes de permissão.
  • A classe MapPermission representa permissões para acessar os dados nos mapas de ObjectGrid.
  • A classe ObjectGridPermission representa permissões para acessar o ObjectGrid.
  • A classe ServerMapPermission representa permissões para acessar mapas de ObjectGrid no lado do servidor a partir de um cliente.
  • A classe AgentPermission representa permissões para iniciar um agente no lado do servidor.
Para obter mais informações,consulte Programação de Autorização de Cliente.

Período de verificação de permissão

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:

É possível utilizar o arquivo XML do ObjectGrid para definir um ObjectGrid e configurar o período de verificação de permissão. No exemplo a seguir, o período de verificação de permissão é configurado para 45 segundos:
<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>
Se desejar criar um ObjectGrid com APIs, chame o seguinte método para configurar o período de verificação de permissão. Este método pode ser chamado apenas antes da inicialização da instância do ObjectGrid. Este método se aplica apenas ao modelo de programação do eXtreme Scale local quando você utiliza a instância do ObjectGrid diretamente.
/**
 * 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);

Autorização de acesso apenas pelo criador

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.

Valores de atributos do modo apenas do criador:
desativada
O recurso de acesso apenas pelo criador é desativado.
complement
O recurso de acesso apenas pelo criador é ativado para complementar a autorização do mapa. Em outras palavras, a autorização de mapa e o recurso de acesso apenas pelo criador serão efetivados. Portanto, é possível limitar ainda mais as operações nos dados. Por exemplo, o criador não pode invalidar os dados.
supersede
O recurso de acesso apenas pelo criador é ativado para substituir a autorização do mapa. Em outras palavras, o recurso de acesso apenas pelo criador substituirá a autorização do mapa e nenhuma autorização de mapa será feita.

É possível configurar o modo de acesso apenas pelo criador de duas maneiras:

Pelo arquivo XML:

É possível utilizar o arquivo XML do ObjectGrid para definir um ObjectGrid e configurar o acesso de modo apenas pelo criador para disabled, complement ou supersede, como mostra o seguinte exemplo:
<objectGrids>
    <objectGrid name="secureClusterObjectGrid" securityEnabled="true"	
	        accessByCreatorOnlyMode="supersede"
        <bean id="TransactionCallback"
              classname="com.ibm.websphere.samples.objectgrid.HeapTransactionCallback" />
    ...
</objectGrids>

Programaticamente:

Se desejar criar um ObjectGrid programaticamente, é possível chamar o método a seguir para configurar o modo de acesso apenas pelo criador. A chamada deste método aplica-se somente ao modelo de programação local do eXtreme Scale quando você instancia diretamente a instância do ObjectGrid:
/**
 * 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);
Para ilustrar ainda mais, considere um cenário no qual uma conta de mapa do ObjectGrid está em uma grade financeira e Manager1 e o Employee1 são os dois usuários. A política de autorização do eXtreme Scale concede todas as permissões de acesso para o Manager1 e apenas a permissão de acesso de leitura para o Employee1. A política do JAAS para a autorização do mapa do ObjectGrid é mostrada no seguinte exemplo:
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"
};
Considere como o recurso de acesso apenas pelo criador afeta a autorização:
  • disabled Se o recurso de acesso apenas pelo criador estiver desativado, a autorização de mapa não é diferente. O usuário "Manager1" pode acessar todos os dados no mapa "account". O usuário "Employee1" pode ler e inserir todos os dados no mapa, mas não pode atualizar, invalidar e remover nenhum dado no mapa.
  • complement Se o recurso de acesso apenas pelo criador estiver ativado com a opção "complement", a autorização de mapa e a autorização de acesso apenas pelo criador estarão em vigor. O usuário "Manager1" pode acessar os dados no mapa "account", mas apenas se o usuário sozinho os carregou no mapa. O usuário "Employee1" pode ler os dados no mapa "account", mas apenas se tal usuário sozinho os carregou no mapa. (Entretanto, este usuário não pode atualizar, invalidar ou remover dados no mapa).
  • supersede Se o recurso de acesso apenas pelo criador estiver ativado com a opção "supersede", a autorização do mapa não será imposta. A autorização de acesso apenas pelo criador será a política apenas de autorização. O usuário "Manager1" possui o mesmo privilégio que no modo "complement": este usuário pode acessar os dados no mapa "account" apenas se o mesmo usuário carregou os dados no mapa. Entretanto, o usuário "Employee1" agora possui acesso total aos dados no mapa "account" se este usuários os carregou no mapa. Em outras palavras, a política de autorização definida na política do Java Authentication and Authorization Service (JAAS) não será imposta.