4.2. O JaasSecurityManagerService MBean
O serviço do MBean
JaasSecurityManagerService administra os gerenciadores de segurança. Embora seu nome inicie com Jaas, os gerenciadores de segurança que isto manuseia não precisam usar JAAS em suas implantações. O nome surgiu a partir do fato que a implantação do gerenciador de segurança é um JaasSecurityManager. A função principal do JaasSecurityManagerService é externalizar a implantação do gerenciador de segurança. Você pode alterar a implantação do gerenciador de segurança fornecendo uma implantação alternativa das interfaces AuthenticationManager e RealmMapping.
A segunda função de fundamento do
JaasSecurityManagerService é fornecer uma implantação javax.naming.spi.ObjectFactory do JNDI para permitir um gerenciamento simples sem código do nome JNDI para mapeamento da implantação do gerenciador de segurança. A segurança é ativada pela especificação do nome JNDI da implantação de segurança através do elemento descritor da implantação <security-domain>.
Quando você especifica o nome JNDI, é necessário ter um bind de objeto disponível para uso. O
JaasSecurityManagerService gerencia a associação das instâncias do gerenciador de segurança para nomes pela efetuação de bind na próxima referência de sistema de nomeação (entre o mesmo), como o JNDI ObjectFactory sob o nome de java:/jaas. Tudo isto, para simplificar a configuração do nome JNDI para bindings do gerenciador de segurança. Isto permite uma convenção de nomeação do java:/jaas/XYZ do formulário como o valor para o elemento <security-domain> e a instância do gerenciador de segurança para o domínio de segurança ser criado, conforme isto seja necessário.
O gerenciador de segurança para o
XYZ de domínio é criado na primeira busca relacionada à efetuação de bind ao java:/jaas/XYZ, criando uma instância da classe especificada pelo atributo SecurityManagerClassName usando um construtor que leva o nome do domínio de segurança.
Importante
Na versões anteriores à versão 5.0 da Plataforma do Aplicativo Enterprise, o prefixo "
java:/jaas, em cada elemento do descritor da implantação <security-domain>, era solicitado para efetuação do bind correta no nome JNDI do domínio de segurança para os binds do gerenciador de segurança.
O prefixo
java:/jaas não é solicitado pela declaração do domínio de segurança a partir da Plataforma do Aplicativo JBoss Enterprise 5. O prefixo java:/jaas ainda é suportado e é mantido para a compatibilidade inversa.
Por exemplo, considere o seguinte trecho de configuração de segurança do seguinte recipiente:
<jboss>
<!-- Configure all containers to be secured under the "customer" security domain -->
<security-domain>customer</security-domain>
<!-- ... -->
</jboss>
Qualquer busca de nome
customer retornará uma instância de gerenciador de segurança associada com o domínio de segurança nomeado customer. Este gerenciador de segurança implementará as interfaces de segurança e será do tipo especificado pelo atributo JaasSecurityManagerServiceSecurityManagerClassName.
O MBean do
JaasSecurityManagerService é configurado por padrão para uso na distribuição do JBoss padrão e você normalmente poderá usar a configuração padrão assim como ela é. Os atributos configuráveis do JaasSecurityManagerService incluem:
- SecurityManagerClassName
- O nome da classe que fornece a implantação do gerenciador de segurança. A implantação deve suportar ambas as interfaces
org.jboss.security.AuthenticationManagereorg.jboss.security.RealmMapping. O padrão éorg.jboss.security.plugins.JaasSecurityManager, caso não tenha sido especificado. - CallbackHandlerClassName
- O nome da classe que fornece a implantação
javax.security.auth.callback.CallbackHandlerusada peloJaasSecurityManager.Nota
Você pode substituir o manuseador usado pela implantação padrãoJaasSecurityManager, caso a implantação padrão (org.jboss.security.auth.callback.SecurityAssociationHandler) não atender suas necessidades. A maioria das implantações irão considerar o manuseador padrão suficiente. - SecurityProxyFactoryClassName
- O nome da classe que fornece a implantação
org.jboss.security.SecurityProxyFactory. O padrão éorg.jboss.security.SubjectSecurityProxyFactory, caso não seja especificado. - AuthenticationCacheJndiName
- Especifica a localização da política do cache credencial de segurança. Isto é tratado primeiramente como uma localização
ObjectFactorycapaz de retornar as instâncias baseando-se no <security-domain>. Isto é realizado anexando o nome do domínio de segurança ao nome quando observando oCachePolicypara o domínio. Caso isto falhe, a localização é tratada como umCachePolicyúnico para todos os domínios de segurança. A política de cache de período limitado é usada como padrão. - DefaultCacheTimeout
- Especifica o intervalo da política de cache de período limitado em segundos. O valor padrão é 1800 segundos (30 minutos). O valor de uso para o intervalo é uma média entre as operações de autenticações frequentes e do período pelo qual a informação de credencial pode permanecer fora de sync em relação ao armazenamento da informação de segurança. Caso você deseje desativar o cache dos credenciais de segurança, configure isto para 0 com o objetivo de forçar a autenticação a ocorrer todo o tempo. Isto não possui efeito caso o
AuthenticationCacheJndiNametenha o valor padrão alterado. - DefaultCacheResolution
- Especifica a resolução da política de cache de período limitado padrão em segundos. Isto controla o intervalo pelo qual o carimbo de tempo atual do cache é atualizado e deve ser inferior que
DefaultCacheTimeout, com o objetivo do intervalo ser significativo. A resolução padrão é de 60 segundos (1 minuto). Isto não tem efeito caso oAuthenticationCacheJndiNametenha o valor padrão alterado. - DefaultUnauthenticatedPrincipal
- Especifica o principal para uso para usuários não-autenticados. Esta configuração facilita a configuração de permissões padrões para usuários que não foram autenticados.
O
JaasSecurityManagerService também suporta um número de operações úteis. Elas incluem o esvaziamento de qualquer cache de autenticação do domínio de segurança no período de rodagem e qualquer um dos métodos da interface do gerenciador de segurança.
O esvaziamento do cache de autenticação do domínio de segurança pode ser usado para remover todos os credenciais quando o armazenamento subjacente for atualizado e você desejar o estado do armazenamento a ser usado imediatamente. A assinatura da operação do MBean é a seguinte:
public void flushAuthenticationCache(String securityDomain).
Isto pode ser invocado de forma programática usando o seguinte trecho de código:
MBeanServer server = ...;
String jaasMgrName = "jboss.security:service=JaasSecurityManager";
ObjectName jaasMgr = new ObjectName(jaasMgrName);
Object[] params = {domainName};
String[] signature = {"java.lang.String"};
server.invoke(jaasMgr, "flushAuthenticationCache", params, signature);
A obtenção da lista dos usuários ativos fornece um instantâneo das chaves
Principals no cache de autenticação do domínio de segurança que não estão expiradas. A assinatura da operação do MBean é a seguinte: public List getAuthenticationCachePrincipals(String securityDomain).
Isto pode ser invocado de forma programática usando o seguinte trecho de código:
MBeanServer server = ...;
String jaasMgrName = "jboss.security:service=JaasSecurityManager";
ObjectName jaasMgr = new ObjectName(jaasMgrName);
Object[] params = {domainName};
String[] signature = {"java.lang.String"};
List users = (List) server.invoke(jaasMgr, "getAuthenticationCachePrincipals",
params, signature);
O gerenciador de segurança possui alguns métodos de acesso adicionais.
public boolean isValid(String securityDomain, Principal principal, Object credential);
public Principal getPrincipal(String securityDomain, Principal principal);
public boolean doesUserHaveRole(String securityDomain, Principal principal,
Object credential, Set roles);
public Set getUserRoles(String securityDomain, Principal principal, Object credential);
Eles fornecem acesso ao
AuthenticationManager correspondente e ao método da interface do domínio de segurança associado nomeado pelo argumento securityDomain.