14.5. Java Authentication and Authorization Service (JAAS)
Os grupos do servidor (num managed domain) e servidores (no servidor autônomo) incluem a configuração para os security domains. O security domain inclui a informação a respeito da combinação da autenticação, autorização, mapeamento e módulos de auditoria com detalhes de configuração. Um aplicativo especifica qual security domain ele requer, pelo nome no próprio jboss-web.xml
.
A configuração específica do aplicativo assume um ou mais dos seguintes arquivos:
Tabela 14.1. Arquivos de Configuração Específica do Aplicativo
Arquivo | Descrição |
---|---|
ejb-jar.xml |
O descritor da implantação para o aplicativo Enterprise JavaBean (EJB) localizado no diretório
META-INF do EJB. Use o ejb-jar.xml para especificar as funções e as mapeie aos principals no nível do aplicativo. Você pode também limitar os métodos específicos e as classes de certas funções. Isto é também utilizado para outra configuração específica do EJB não relacionada à segurança.
|
web.xml |
O descritor de implantação do aplicativo da web Java Enterprise Edition (EE). Use o
web.xml para declarar o security domain que o aplicativo usa para autenticação e autorização, assim como restrições de transporte e recurso para o aplicativo, tais como a limitação dos tipos de solicitações HTTP permitidas. Você pode configurar uma autenticação baseada na web simples neste arquivo. Isto é também usado para outra configuração específica do aplicativo não relacionada com a segurança.
|
jboss-ejb3.xml |
Contém as extensões específicas do JBoss para o descritor
ejb-jar.xml .
|
jboss-web.xml |
Contém as extensões específicas do JBoss ao descritor
web.xml .
|
Nota
ejb-jar.xml
e web.xml
estão definidos na especificação do Java Enterprise Edition (Java EE). O jboss-ejb3.xml
fornece extensões específicas do JBoss para o ejb-jar.xml
e o jboss-web.xml
fornece extensões específicas do JBoss para o web.xml
.
O Java Authentication and Authorization Service (JAAS) é um framework para segurança à nível do usuário nos aplicativos Java, usando os pluggable authentication modules (PAM - módulos de autenticação plugáveis). Ele está integrado no Java Runtime Environment (JRE). O componente ao lado do contêiner é o org.jboss.security.plugins.JaasSecurityManager
MBean no JBoss Enterprise Application Plataform. Ele fornece as implementações padrões das interfaces AuthenticationManager
e RealmMapping
.
O JaasSecurityManager usa os pacotes JAAS para implantar o comportamento da interface do AuthenticationManager e RealmMapping. Na realidade, seu comportamento deriva da execução das instâncias do módulo de login que são configuradas no security domain pelo qual o JaasSecurityManager foi determinado. Os módulos de login implementam a autenticação principal do security domain e comportamento de mapeamento de função. Você pode usar o JaasSecurityManager por todos os security domains pelo plugging em configurações para os domains.
EJBHome
. O EJB já foi implantado no servidor e seus métodos de interface EJBHome
foram assegurados usando os elementos <method-permission> no descritor ejb-jar.xml
. Ele usa o security domain jwdomain
, que é especificado no elemento <security-domain> do arquivo jboss-ejb3.xml
. A imagem abaixo apresenta as etapas que serão explicadas mais tarde:
Figura 14.1. Etapas da Invocação do Método EJB com Segurança
- O cliente executa o login JAAS para estabelecer o principal e credenciais para autenticação. Isto é o Client Side Login rotulado na figura. Isto pode ser também executado na forma de JNDI.Para executar um login JAAS, você cria uma instância de LoginContext e passa o nome de configuração para uso. Neste caso, o nome da configuração é
other
. Este login associa de uma vez só o principal do login e credenciais com todas as invocações de método EJB subsequente. Este processo não autentica o usuário necessariamente. A natureza do login ao lado do cliente depende da configuração do módulo de login que o cliente usa. Nesta amostra, a entrada da configuração de login ao lado do clienteother
usa o módulo de loginClientLoginModule
. Este módulo efetua o bind no nome do usuário e senha à camada de invocação EJB para autenticação mais tarde no servidor. A autenticação do cliente não é autenticado no cliente. - O cliente obtém o método
EJBHome
e o invoca no servidor. A invocação inclui os argumentos do método passados ao cliente, juntamente com a identidade do usuário e credenciais a partir do login JAAS ao lado do cliente. - No lado do servidor, o servidor de segurança autentica o usuário que invocou o método. Isto envolve outro login JAAS.
- O security domain na parte inferior determina a escolha dos módulos de login. O nome do security domain é passado ao construtor
LoginContext
como o nome de entrada da configuração do login. O security domain éjwdomain
. Caso a autenticação for bem sucedida, o JAAS Subject é criado. O JAAS subject inclui PrincipalSet, que inclui os seguintes credenciais:- A instância
java.security.Principal
que corresponde à identidade do cliente a partir do ambiente de segurança da implantação. - Um
java.security.acl.Group
chamadoRoles
que contém os nomes da função do domain do aplicativo do usuário. Os objetosorg.jboss.security.SimplePrincipal
do tipo representam os nomes da função. Essas funções validam o acesso aos métodos EJB de acordo com as restrições noejb-jar.xml
e implementação do métodoEJBContext.isCallerInRole(String)
. - O
java.security.acl.Group
opcional nomeadoCallerPrincipal
, que contém umorg.jboss.security.SimplePrincipal
único que corresponde à identidade do chamador do domain do aplicativo. O associado do grupo CallerPrincipal é o valor retornado pelo métodoEJBContext.getCallerPrincipal()
. Este mapeamento permite que o Principal no ambiente de segurança operacional mapeie um Principal conhecido pelo aplicativo. Na ausência do mapeamento CallerPrincipal, o principal operacional é o mesmo do principal do domain do aplicativo.
- O servidor verifica que o usuário chamando o método EJB possui permissão. A execução desta autorização envolve as seguintes etapas:
- Obtém os nomes de funções para acesso do método EJB a partir do contêiner EJB. Os nomes de funções são determinados pelos elementos <role-name> do descritor
ejb-jar.xml
de todos os elementos <method-permission> contendo o método invocado. - Caso nenhuma das funções seja determinada ou o método especificado num elemento de lista exclusivo, o acesso ao método é negado. Do contrário, o método
doesUserHaveRole
é invocado no gerenciador de segurança pelo interceptor de segurança para verificar se o chamador possui um dos nomes de função determinado. Esse método interage através dos nomes de função e verifica se o grupoSubject Roles
do usuário autenticado contém um SimplePrincipal com o nome da função determinado. O acesso é permitido caso o nome da função seja um associado do grupo Funções. O acesso é negado caso nenhum dos nomes de função seja associado. - Caso o EJB use um proxy de segurança personalizado, a invocação do método é delegada do proxy. Caso o proxy de segurança negar acesso ao chamador, ele lança um
java.lang.SecurityException
. Do contrário, o acesso ao método EJB é permitido e a invocação do método passa ao próximo interceptor do contêiner. O SecurityProxyInterceptor manuseia esta checagem e este interceptor não é apresentado. - Para as solicitações da conexão, o servidor da web verifica as restrições de segurança definidas no
web.xml
que combinam com o recurso solicitado e o método HTTP acessado.Caso a restrição existir para a solicitação, o servidor da web chama o JaasSecurityManager para executar a autenticação principal, que em troca garante que as funções do usuário são associadas com o objeto principal.