LABORATÓRIO 06 Segurança Este laboratório tem por objetivo exercitar o uso do componente de segurança do Framework e uso da especificação JAAS. Objetivos: Uso do Login Module do Componente de Segurança do Framework; Criação de um provider de segurança; Criação de classe para autenticação; Criação de classe para autorização; Configuração JAAS JBoss. Exercício 6.1 Criação de um provider de segurança 1. Configuração da Aplicação Uso do JBoss Baixe (http://www.jboss.org/jbossas/downloads/) e instale o JBoss (usamos a versão 4.2.3.GA), configurando para uso no Eclipse. Extrair zip; Adicionar a lista de servidores do Eclipse (Menu: Window Preferences Server Runtime Environments; clica em Add, escolhe a versão do JBoss correspondente, clica em Next, aponta para o diretório de instalação e Finish); Cadastrar a aplicação escola no JBoss (janela Server, clica com botão direito no JBoss server e escolhe Add and Remove Projects...): Modifique o profile Maven da aplicação escola para uso do jboss. Menu: Project Properties Maven 1
2. Autenticação padrão do JBoss Crie na pasta {jboss-home/server/default/conf os seguintes arquivos: defaultroles.properties Conteúdo do arquivo: aluno=role_aluno professor=role_professor admin=role_professor,role_administrador defaultusers.properties Conteúdo do arquivo: aluno=aluno professor=professor admin=admin Inicie a aplicação, autentique-se e verifique seu funcionamento no Jboss. 2
3. Construção do provider escola Adicione ao arquivo archetype-catalog.xml a definição do arquétipo para criação de providers: <?xml version="1.0" encoding="utf-8"?> <archetype-catalog> <archetypes> <archetype> <groupid>br.gov.component.demoiselle.archetypes</groupid> <artifactid>demoiselle-archetype-webapp-sample</artifactid> <version>1.0.0</version> <repository>http://demoiselle.sourceforge.net/repository/release</repository> </archetype> <archetype> <groupid>br.gov.component.demoiselle.archetypes</groupid> <artifactid>demoiselle-archetype-security-provider</artifactid> <version>1.0.2</version> <repository>http://demoiselle.sourceforge.net/repository/release</repository> </archetype> </archetypes> </archetype-catalog> Criação do Provider Volte ao Eclipse, acione o menu: File New Project... Selecione a opção Maven Project: 3
Mantenha sua tela conforme abaixo para que o projeto seja criado dentro do workspace padrão. Na tela seguinte são exibidos todos os arquétipos cadastros no archetype-catalog.xml; Selecione no campo Catalog a opção: Default Local; Selecione a última versão do arquétipo demoiselle (demoiselle-archetype-security-provider). Vá à próxima tela. Informe os dados do seu projeto. Group Id: br.gov.demoiselle Artifact Id: escola-security-provider Version: 0.0.1-SNAPSHOT Package: br.gov.demoiselle.escola.security.provider Acione o botão Finish para iniciar a criação do projeto. 4
Seu projeto será criado conforme estrutura abaixo: Crie no pacote (br.gov.demoiselle.escola.security.provider.security.auth.provider) crie um Principal da aplicação Escola: package br.gov.demoiselle.escola.security.provider.security.auth.provider; import java.security.principal; public class EscolaPrincipal implements Principal { private String name; private String cpf; private String nomecompleto; public EscolaPrincipal(String name, String cpf, String nomecompleto) { super(); this.name = name; this.cpf = cpf; this.nomecompleto = nomecompleto; public String getname() { return name; public void setname(string name) { this.name = name; public String getcpf() { return cpf; public void setcpf(string cpf) { this.cpf = cpf; public String getnomecompleto() { return nomecompleto; public void setnomecompleto(string nomecompleto) { this.nomecompleto = nomecompleto; 5
No mesmo pacote, crie a classe de autenticação da aplicação Escola: package br.gov.demoiselle.escola.security.provider.security.auth.provider; public class EscolaAutenticacao implements IAuthenticationProvider{ public Principal authenticate(x509certificate x509) {return null; public Principal authenticate(string user, String password) { if (user.equals("aluno") && password.equals("aluno")){ return new EscolaPrincipal("aluno", "001", "Aluno da Escola"); if (user.equals("professor") && password.equals("professor")){ return new EscolaPrincipal("professor", "002", "Professor da Escola"); if (user.equals("admin") && password.equals("admin")){ return new EscolaPrincipal("admin", "003", "Administrador da Escola"); return null; public Principal authenticate(string user, String password, String newpassword) { return null; public void initialize(properties properties) { No mesmo pacote crie, a classe de autorização da aplicação Escola: package br.gov.demoiselle.escola.security.provider.security.auth.provider; import java.security.principal; import java.util.arraylist; import java.util.collection; import java.util.properties; import br.gov.component.demoiselle.security.auth.role; import br.gov.component.demoiselle.security.auth.provider.iauthorizationprovider; public class EscolaAutorizacao implements IAuthorizationProvider{ public Collection authorize(principal callerprincipal) { EscolaPrincipal principal = (EscolaPrincipal) callerprincipal; Collection papeis = new ArrayList(); if (principal.getname().equals("aluno")){ papeis.add(new Role("role_aluno")); else if (principal.getname().equals("professor")){ papeis.add(new Role("role_professor")); else if (principal.getname().equals("admin")){ papeis.add(new Role("role_administrador")); return papeis; public void initialize(properties properties) { 6
O provider deve está estruturado conforme abaixo: Instale o projeto escola-security-provider utilizando o comando package do maven: Menu Run Run As Maven Package O pacote será gerado na pasta: /escola-security-provider/target/ com o nome: escola-securityprovider-0.0.1-snapshot.jar 1. Configuração JAAS (Jboss) Copie o jar escola-security-provider-0.0.1-snapshot.jar para a pasta {jboss_home/server/default/lib. Copie o jar demoiselle-security-1.0.5.jar para a pasta {jboss_home/server/default/lib, localizado em: http://demoiselle.sourceforge.net/repository/release/br/gov/component/demoiselle/demoisell e-security/1.0.5/ Copie o jar demoiselle-security-catalina-1.0.5.jar para a pasta {jboss_home/server/default/lib, localizado em: http://demoiselle.sourceforge.net/repository/release/br/gov/component/demoiselle/demoisell e-security-catalina/1.0.5/ Configure o arquivo $jboss_home/server/default/conf/login-config.xml, inclua um novo 7
application-policy conforme abaixo: <application-policy name = "escola"> <authentication> <login-module code="br.gov.component.demoiselle.security.auth.provider.providerloginmodule" flag="required"> <module-option name="credential-type">user_password</module-option> <module-option name="authentication-provider-class"> br.gov.demoiselle.escola.security.provider.security.auth.provider.escolaautenticacao </module-option> <module-option name="authorization-provider-class"> br.gov.demoiselle.escola.security.provider.security.auth.provider.escolaautorizacao </module-option> </login-module> </authentication> </application-policy> Para vinculação da aplicação escola ao domínio de segurança definido no Jboss (loginconfig.xml) crie o arquivo /src/main/webapp/web-inf/jboss-web.xml (dentro da aplicação escola). Segue exemplo abaixo: <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE jboss-web PUBLIC "-//JBoss//DTD Web Application 4.2//EN" "http://www.jboss.org/j2ee/dtd/jbossweb_4_2.dtd"> <jboss-web> <security-domain>java:/jaas/escola</security-domain> </jboss-web> Edite o arquivo jboss-service.xml localizado na pasta {jboss-home/server/default/deploy/jbossweb.deployer/meta-inf e adicione uma para a autenticação FORM-AND- CLIENT-CERT. <attribute name="authenticators" serialdatatype="jbxb"> <java:properties xmlns:java="urn:jboss:java-properties" xmlns:xs="http://www.w3.org/2001/xmlschema-instance" xs:schemalocation="urn:jboss:java-properties resource:java-properties_1_0.xsd"> <java:key>basic</java:key> <java:value>org.apache.catalina.authenticator.basicauthenticator</java:value> <java:key>client-cert</java:key> <java:value>org.apache.catalina.authenticator.sslauthenticator</java:value> <java:key>digest</java:key> <java:value>org.apache.catalina.authenticator.digestauthenticator</java:value> <java:key>form</java:key> <java:value>org.apache.catalina.authenticator.formauthenticator</java:value> <java:key>none</java:key> <java:value>org.apache.catalina.authenticator.nonloginauthenticator</java:value> <java:key>form-and-client-cert</java:key> <java:value> br.gov.component.demoiselle.security.catalina.authenticator.formandsslauthenticator 8
</java:value> </java:properties> </attribute> Modifique o web.xml da aplicação escola para aceitar o mecanismo de autenticação por formulário e certificado digital: <login-config> <auth-method>form-and-client-cert</auth-method> <form-login-config> <form-login-page>/public/pages/security/login.jsp</form-login-page> <form-error-page>/public/pages/error/acess.jsp</form-error-page> </form-login-config> </login-config> Exclua os arquivos: defaultroles.properties e defaultusers.properties, da pasta {Jboss- Home/server/default/conf/ Republique e Reinicie a aplicação no modo debug e verifique a execução do provider ao fazer o login da aplicação. FIM 9