O documento apresenta uma agenda para um workshop sobre segurança JEE, abordando conceitos como segurança declarativa e programática para EJB e web, JACC, e integração com infraestrutura como LDAP e Tivoli Access Manager.
Configurações debaixa segurança expõem as empresas à perdas de negócios
16.
Os requisitosregulatórios de PCI exigem a segurança de aplicativo
17.
80% doscustos de desenvolvimento são gastos na identificação e correção de defeitosBenefíciosReduz o risco de interrupção, desfiguração ou roubo de dados associados com aplicativos Web
18.
Assessora emonitora conformidade da política de segurança em toda a empresa
19.
Melhora aconformidade com as normas do setor e exigências regulatórias (por exemplo PCI)
20.
Melhora acapacidade de integrar aplicativos críticos do negócio
21.
Teste econtrole automatizados durante todo o ciclo de vida do desenvolvimento, reduzindo os custos de segurança a longo prazo.Motivações e objetivosControle de acesso incorporado nas aplicações pode falhar
Modelo de segurançaJEEA segurança das aplicações JEE é implementada usando papeis de segurança (Role)
36.
Os papeis desegurança são aplicados nos componentes Web e EJB métodos EJB ou URIs WebA Segurança pode ser especificada de 2 maneiras: Declarativa em tempo de configuração, através dos ‘deployment descriptors’ Programática utilizando as APIS padrões em tempo de desenvolvimentoA associação dos usuários e dos grupos com os papeis JEE é geralmente feito no momento da instalação da aplicação (deploy)ProcessoMétodoEJBBobPapel-PermissãoLigaçãoMétodoEJBAdministradorAnaMétodoEJBEnterprise Java BeanSolicitanteServletCorretoresjspgif,cssAtendenteSeguradosComponentesWebRole Segurança JEEUsuários/Grupos
37.
Modelo de autorizaçãobaseado em papelQuais papeis são permitidos?EJB: roles necessários dos métodos
38.
Servlet/jsp: roles necessáriosnas security constraintsAcessoautorizadoLista de papeisSIMAlgum igual?RequisiçãoautenticadaQuais papeis são atribuídos? Obter nome do usuário/grupo nos credenciais
39.
Obter os rolesatribuídos a esse usuário/grupo NÃOLista de papeisAcessonegado
40.
MapeamentoApplication Deployment DescriptorGrupo Mapeamento usuáriosUsuárioRecurso Mapeamento RoleUsuárioUsuárioUsuárioUsuárioRoleMetodo EJBRoleGrupoURI WebGrupoUsuárioRole Mapeamento PrincipalDefinido pelo programador da aplicaçãoDefinido pelo instalador da aplicação
41.
Mapeamento Processos (antigo-novo)CadastrarpapelRU2ETrustPapelRAPermissãoPapel RU456Cadastrar usuárioAssociar Papel RU ao usuário1Cadastrar permissão com descritor da aplicaçãoCadastrar papel RA e associar permissãoAssociar papel RA e papel RU3UsuárioGerenciadorLDAPsincronizaçãoColocar usuário no grupoRAD-Security EditorDeploy-scriptRole JEERecurso JEEGrupo RU
Segurança EJB declarativaImplementaçãode segurança declarativa com AnnotationRestrigir acesso ao EJB de sessão Donateimport javax.annotation.security.DeclareRoles;import javax.annotation.security.RolesAllowed;....@DeclareRoles( { "DMANAGERS_ROLE", "DUSERS_ROLE" })public class DonateBean implements DonateBeanInterface, ...... {@RolesAllowed( { "DMANAGERS_ROLE","DUSERS_ROLE" })public void donateToFund(Employee employee, Fund fund, int hours) .........@RolesAllowed( { "DMANAGERS_ROLE","DUSERS_ROLE" })public String donateToFund(int employeeId, String fundName, int hours) {
45.
Deployment descriptor EJBejb-jar.xml(diretório DonateEJB/ejbModule/META-INF) imediatamente antes do tag </ejb-jar.xml> <assembly-descriptor> <security-role> <role-name>DMANAGERS_ROLE</role-name> </security-role> <security-role> <role-name>DUSERS_ROLE</role-name> </security-role> <method-permission> <role-name>DUSERS_ROLE</role-name> <role-name>DMANAGERS_ROLE</role-name> <method> <ejb-name>DonateBean</ejb-name> <method-name>donateToFund</method-name> </method> </method-permission></assembly-descriptor>Utilizar o editor de Segurança do RAD para auxilioSegurança Web declarativaImplementação de segurança declarativa com AnnotationLista de annotations Web@DeclareRoles@RunAs
46.
Segurança WEBEditor desegurança do RAD: Restringir o acesso a páginas Web com segurança declarativa
47.
Informações de segurançaOeditor de segurança insere as seguintes informações no arquivo web.xml:A restrição de segurança <security-constraint> é o elemento base que contém:O elemento <web-resource-collection> define os privilegios de acesso a um conjunto de recursos. Este elemento pode especificar padrões de URL e métodos HTTP.
48.
O elemento <auth-constraint> define quais são os roles necessários para acessar esse conjunto de recursos Web.
49.
O elemento <security-role> declare os nomes dos roles utilizados nos elementos security-constraint.<security-constraint> <display-name>ALLAUTHENTICATED_ROLEConstraint</display-name> <web-resource-collection> <web-resource-name>ALLAUTHENTICATED_ROLECollection</web-resource-name> <url-pattern>/faces/FindEmployee.jsp</url-pattern> <url-pattern>/FindEmployee.faces</url-pattern> <url-pattern>/FindEmployee.jsp</url-pattern> <http-method>GET</http-method> <http-method>PUT</http-method> <http-method>HEAD</http-method> <http-method>TRACE</http-method> <http-method>POST</http-method> <http-method>DELETE</http-method> <http-method>OPTIONS</http-method> </web-resource-collection> <auth-constraint> <description>Auto generated Authorization Constraint</description> <role-name>ALLAUTHENTICATED_ROLE</role-name> </auth-constraint></security-constraint><security-role> <description> </description> <role-name>DUSERS_ROLE</role-name></security-role>web.xml
Código para segurançaSystem.setProperty("com.ibm.SSL.ConfigURL",propDir +"ssl.client.props");System.setProperty("java.security.auth.login.config", propDir +"wsjaas_client.conf");System.setProperty("com.ibm.CORBA.ConfigURL",propDir +"sas.client.props");Definir SSL, JAAS e SAS (Secure Authentication Services)Propriedades necessárias para acessar o servidorctx.lookup("");Conectar ao Contexto inicial para carregar o Realm default e carregar as informações necessárias ao Security ServerLoginContext lc = new LoginContext("WSLogin",new WSCallbackHandlerImpl("DNARMSTRONG", "xxxxxxxx"));lc.login();final Subject subject = lc.getSubject();System.out.println("subject=" + subject.toString());WSSubject.setRunAsSubject(subject);Criar o contexto do login, fazer o login, e colocar o usuário autenticado como o usuário default para este thread de execução