Capítulo 8. Autorização

A autorização relata o tipo de componentes que você deseja proteger, ao invés da camada que reside no mesmo.
O domínio de segurança não solicita claramente uma política de autorização. Caso uma política de autorização não seja especificada, o jboss-web-policy padrão e a autorização jboss-ejb-policy, configurados no jboss-as/server/$PROFILE/deploy/security/security-policies-jboss-beans.xml, serão utilizados.
Caso você escolha especificar uma política de autorização, ou criar um arquivo de descritor de implementação padrão com uma política de autorização válida, essas configurações substituem as configurações padrões no security-policies-jboss-beans.xml.
Os usuários podem fornecer políticas de autorização que implementam o comportamento padrão. A configuração do comportamento padrão permite que pilhas de controle de autorização a serem conectadas no jboss.xml (for EJBs) e jboss-web.xml (para WAR).
A substituição da autorização padrão para os componentes da WEB ou EJB é fornecida para o Contrato de Autorização Java para Recipientes - Java Authorization Contract for Containers (JACC) e Linguagem Marcada de Controle de Acesso Extensivo - Extensible Access Control Markup Language (XACML), além dos módulos padrões que implementam o comportamento de especificação.
Refira-se à Seção 6.2, “<authorization>” para maiores informações sobre o esquema do elemento <authorization>.

Procedimento 8.1. Configuração das políticas de autorização para todos os componentes EJB e WAR

Você pode substituir a autorização para todos os componentes EJBs e Web ou para um componente particular.
Este procedimento descreve como definir o controle de autorização JACC para todos os componentes EJB e WAR. A amostra define os módulos de política para os aplicativos EJB e Web: jboss-web-policy e jboss-ejb-policy.
  1. Abra o bean de política de segurança

    Navegue ao $JBOSS_HOME/server/$PROFILE/deploy/security
    Abra o arquivo security-policies-jboss-beans.xml.
    Por padrão, o arquivo security-policies-jboss-beans.xml contém a configuração no Exemplo 8.1, “security-policies-jboss-beans.xml”.

    Exemplo 8.1. security-policies-jboss-beans.xml

    <?xml version="1.0" encoding="UTF-8"?>
    
    <deployment xmlns="urn:jboss:bean-deployer:2.0">
    
       <application-policy xmlns="urn:jboss:security-beans:1.0" name="jboss-web-policy" extends="other">
          <authorization>
             <policy-module code="org.jboss.security.authorization.modules.DelegatingAuthorizationModule" flag="required"/>
          </authorization>
       </application-policy>   
    
       <application-policy xmlns="urn:jboss:security-beans:1.0" name="jboss-ejb-policy" extends="other">
          <authorization>
             <policy-module code="org.jboss.security.authorization.modules.DelegatingAuthorizationModule" flag="required"/>
          </authorization>
       </application-policy>
    
    </deployment>
    
  2. Altere as definições da política do aplicativo

    Para configurar uma política de autorização única para cada componente usando o JACC, anexe cada atributo <policy-module> code com o nome do módulo de autorização JACC.
    <?xml version="1.0" encoding="UTF-8"?>
    <deployment xmlns="urn:jboss:bean-deployer:2.0">
    
       <application-policy xmlns="urn:jboss:security-beans:1.0" name="jboss-web-policy" extends="other">
          <authorization>
             <policy-module code="org.jboss.security.authorization.modules.JACCAuthorizationModule" flag="required"/>
          </authorization>
       </application-policy>   
    
       <application-policy xmlns="urn:jboss:security-beans:1.0" name="jboss-ejb-policy" extends="other">
          <authorization>
             <policy-module code="org.jboss.security.authorization.modules.JACCAuthorizationModule" flag="required"/>
          </authorization>
       </application-policy>
    
       <application-policy xmlns="urn:jboss:security-beans:1.0" name="jacc-test" extends="other">
          <authorization>
             <policy-module code="org.jboss.security.authorization.modules.JACCAuthorizationModule" flag="required"/>
          </authorization>
       </application-policy>
    
    </deployment>
    
  3. Reinicie o servidor

    Você configurou o arquivo security-policy-jboss-beans.xml com a autorização JACC ativada para cada política do aplicativo.
    Reinicie o servidor para garantir que a nova política de segurança tenha efeito.
Configuração de autorização para componentes EJB e WEB específicos

Caso aplicativos solicitem políticas de segurança granular, você pode declarar políticas de segurança de autorização múltiplas para cada política de aplicativo. Os novos domínios de segurança podem herdar configurações base a partir de outros domínios de segurança e substituir configurações específicas tais como o módulo de política de autorização.

Procedimento 8.2. Configuração das políticas de autorização para domínios de segurança específicos

Você pode substituir a autorização para um componente particular.
Este procedimento descreve como herdar as configurações de outras definições de domínio de segurança e especificar diferentes políticas de autorização por domínio de segurança.
Neste procedimento, os dois domínios de segurança são definidos. O domínio de segurança test-domain usa o módulo de logon UsersRolesLoginModule e usa a autorização JACC. O domínio de segurança test-domain-inherited herda a informação do módulo de logon a partir do test-domain, além de especificar que a autorização XACML deve ser usada.
  1. Abra a política de segurança

    Você pode especificar as configurações do domínio de segurança no arquivo jboss-as/server/$PROFILE/conf/login-config.xml ou criar um arquivo descritor de implantação contendo as configurações. Escolha o descritor de implantação caso deseje empacotar as configurações do domínio de segurança com seu aplicativo.
    • Localize e abra o login-config.xml

      Navegue ao arquivo login-config.xml do perfil do servidor sendo utilizado e abra o arquivo para edição.
      $JBOSS_HOME/jboss-as/server/$PROFILE/conf/login-config.xml
    • Crie o descritor jboss-beans.xml

      Crie o descritor [prefix]-jboss-beans.xml substituindo [prefix] por um nome significativo (por exemplo: test-war-jboss-beans.xml)
      Salve este arquivo no diretório /deploy do perfil do servidor que você está configurando.
      jboss-as/server/$PROFILE/deploy/[prefix]-jboss-beans.xml
  2. Especifique o domínio de segurança do teste-domínio

    No arquivo de destino escolhido no passo 1, especifique o domínio de segurança test-domain. Este domínio contém a informação de autenticação, incluindo a definição <login-module> e a definição do módulo de política de autorização JACC.
    <?xml version="1.0" encoding="UTF-8"?>
    
    <deployment xmlns="urn:jboss:bean-deployer:2.0">
    
       <application-policy xmlns="urn:jboss:security-beans:1.0" name="test-domain">
         <authentication>
            <login-module code = "org.jboss.security.auth.spi.UsersRolesLoginModule"
                flag = "required">
                <module-option name = "unauthenticatedIdentity">anonymous</module-option>
                <module-option name="usersProperties">u.properties</module-option>
                <module-option name="rolesProperties">r.properties</module-option>
             </login-module>
          </authentication>
          <authorization>
             <policy-module code="org.jboss.security.authorization.modules.JACCAuthorizationModule" flag="required"/>
          </authorization>
       </application-policy>  
    
    
    </deployment>
    
  3. Anexe o domínio de segurança teste-domínio-herdado

    Anexe a definição da política do aplicativo test-domain-inherited após a política do aplicativo test-domain.
    Configure o atributo extends para other, de forma que a informação do módulo de logon é herdada.
    Especifique o módulo de autorização XACML no elemento <policy-module>.
    <?xml version="1.0" encoding="UTF-8"?>
    
    <deployment xmlns="urn:jboss:bean-deployer:2.0">
    
       <application-policy xmlns="urn:jboss:security-beans:1.0" name="test-domain">
         <authentication>
            <login-module code = "org.jboss.security.auth.spi.UsersRolesLoginModule"
                flag = "required">
                <module-option name = "unauthenticatedIdentity">anonymous</module-option>
                <module-option name="usersProperties">u.properties</module-option>
                <module-option name="rolesProperties">r.properties</module-option>
             </login-module>
          </authentication>
          <authorization>
             <policy-module code="org.jboss.security.authorization.modules.JACCAuthorizationModule" flag="required"/>
          </authorization>
       </application-policy>  
    
       <application-policy xmlns="urn:jboss:security-beans:1.0" name="test-domain-inherited" extends="other"> 
          <authorization>
             <policy-module code="org.jboss.security.authorization.modules.XACMLAuthorizationModule" flag="required"/>
          </authorization>
       </application-policy> 
    
    </deployment>
    
  4. Reinicie o servidor

    Você precisa configurar o arquivo de destino com os domínios de segurança que usam diferentes métodos de autorização.
    Reinicie o servidor para garantir que a nova política de segurança tenha efeito.

8.1. Delegação de Módulo

Você pode usar a delegação do módulo de autorização com um descritor de implantação (*-jboss-beans.xml) para especificar as políticas de autorização à autenticação padrão de sua implementação, uma vez que a autorização relata o tipo de componente (não a camada) que você protege.
A classe org.jboss.security.authorization.modules.AuthorizationModuleDelegate fornece um número de sub-classes que permitem você implementar a delegação do módulo:
  • AbstractJACCModuleDelegate
  • WebPolicyModuleDelegate
  • EJBPolicyModuleDelegate
  • WebXACMLPolicyModuleDelegate
  • WebJACCPolicyModuleDelegate
  • EJBXACMLPolicyModuleDelegate
  • EJBJACCPolicyModuleDelegate
Você pode criar seu próprio módulo de delegação, contanto que módulo estenda a classe org.jboss.security.authorization.modules.AuthorizationModuleDelegate.
Você pode declarar os módulos de delegação com o elemento <module-option> de sua política <authorization> para implementar o módulo de delegação. Cada módulo possui prefixo do componente que ele é relacionado, conforme apresentado no Exemplo 8.2, “Declaração do Módulo de Delegação”.

Exemplo 8.2. Declaração do Módulo de Delegação

<application-policy xmlns="urn:jboss:security-beans:1.0" name="test-domain" extends="other">
<authorization>
<policy-module code="xxx.yyy.MyAuthorizationModule" flag="required">
<module-option name="delegateMap">web=xxx.yyy.mywebauthorizationdelegate,ejb=xxx.yyy.myejbauthorizationdelegate</module-option>
</policy-module>
</authorization>
</application-policy>