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>
<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 JaasSecurityManagerService
SecurityManagerClassName
.
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.AuthenticationManager
eorg.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.CallbackHandler
usada 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
ObjectFactory
capaz 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 oCachePolicy
para 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
AuthenticationCacheJndiName
tenha 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 oAuthenticationCacheJndiName
tenha 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:
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:
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);
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
.