Artigo no estilo Mentoring
Segurança é um requisito fundamental em grande parte das aplicações web, pois elas estão mais sujeitas a ataques, por conta de sua maior exposição. Para se ter uma ideia, mais de 1 milhão de incidentes foram reportados em 2014 ao Centro de Estudos, Resposta e Tratamento de Incidentes de Segurança no Brasil (CERT.br). Uma forma de minimizar a ocorrência desses incidentes, preservando a integridade do sistema e de suas informações, consiste em restringir o acesso a determinadas partes da aplicação a usuários autenticados, que, por sua vez, podem acessar somente funcionalidades relacionadas às suas competências.
Nesse contexto, o Spring Security é um framework destinado a proteger aplicações web, garantindo a identidade de seus usuários, por meio da funcionalidade de autenticação, e provendo controle de acesso a recursos, por meio da funcionalidade de autorização. Essas funcionalidades são embasadas por duas estruturas de dados básicas: usuário e autorização. Usuário contém os dados utilizados para validação da identidade dos usuários, como nome e senha, enquanto autorização contém os perfis de acesso, que agrupam diversas funcionalidades da aplicação. Um exemplo típico de perfil de acesso é o de “administrador”, que geralmente possui acesso a todas as funcionalidades. Nesse momento, saiba que a relação entre usuário e autorização é de “muitos para muitos”, onde cada usuário pode possuir várias autorizações e cada autorização pode pertencer a vários usuários.
As associações entre os perfis de acesso e as funcionalidades geralmente são definidas de forma estática, conforme exemplos contidos no material de referência e guias disponíveis no site do Spring Security. Essa construção cobre grande parte das situações existentes, mas torna necessária a participação de um desenvolvedor e a geração de uma nova versão da aplicação web sempre que for preciso alterar quais funcionalidades um perfil pode acessar. No entanto, infelizmente nem sempre é possível esperar uma próxima versão para o estabelecimento de uma nova política de acesso.
Diante desse cenário, o objetivo deste artigo é apresentar uma modelagem de dados alternativa mais flexível, que permita a criação e exclusão de perfis de acesso, assim como a associação e dissociação dinâmica de funcionalidades. Com isso, seremos capazes de criar aplicações, com segurança baseada em Spring Security, que suportem alterações constantes de políticas de acesso.
Spring Security 4
Utilizaremos neste artigo a versão 4 do Spring Security, lançada em março de 2015, para gerenciar a segurança de uma aplicação exemplo, que nos auxiliará na fixação dos conceitos apresentados. Essa versão apresenta como principais características a inclusão do suporte ao protocolo WebSocket, integração com o Spring Data e disponibilização de anotações para utilização em testes.
Suporte a WebSocket
A primeira nova característica do Spring Security 4 é a inclusão do suporte ao gerenciamento de autorizações aplicadas às mensagens do protocolo WebSocket (vide BOX 1), por meio da abstração Spring Messaging. Essa nova opção preenche uma lacuna de quase dois anos desde o lançamento da versão 4 do Spring Framework, em 2013, que incorporou esse protocolo.
Com isso, podemos, agora, aplicar políticas de acesso às mensagens transitadas via WebSocket, tanto por Java Configuration quanto por XML, utilizando as autorizações associadas ao usuário autenticado. A Listagem 1 apresenta um exemplo de configuração por Java Configuration, onde cada mensagem com destino iniciado em /user/ requer que o usuário se encontre autenticado. Já a Listagem 2 apresenta uma configuração por XML, onde todas as mensagens do tipo CONNECT são aceitas, todas as mensagens do tipo SUBSCRIBE são negadas e cada mensagem com destino iniciado em /user/ requer que o usuário se encontre autenticado e possua a autorização ROLE_USER.
Desbloqueie toda a DevMedia
-
+2000 artigos e vídeos
-
+40 trilhas sobre Front-end, Back-end, IA e muito mais
-
+5000 exercícios práticos
-
Mentorias ao vivo individuais