Estudo de Caso de uma Estrutura de Autenticação Única utilizando o protocolo OAuth

Este é meu tema de trabalho de conclusão de curso da especialização em Projeto e Desenvolvimento de Sistemas Baseados em Objetos para Ambiente Internet pela Universidade Tecnológica Federal do Paraná (UTFPR). Tive como orientador o professor especialista Diego de Carvalho, do campus de Pato Branco.

Objetivo Geral

Propor uma estrutura para fornecer autenticação única com o protocolo
OAuth na plataforma Java, e implementar duas mini-aplicações que utilizem esta
estrutura de autenticação, sendo elas de plataformas de programação diferentes.

Conteúdo

O trabalho começa com uma pesquisa bibliográfica sobre diversos tópicos que abrangem o protocolo OAuth. Primeiramente sobre os conceitos de segurança de software, autenticação, autorização, cloud computing, o protocolo HTTP, protocolos similares (OpenID e CAS), e uma pesquisa aprofundada no protocolo OAuth, tendo como base principalmente sua especificação.

Tecnologias

Para o desenvolvimento das aplicações utilizadas no estudo de caso foram utilizadas as seguintes tecnologias:

  • Spring MVC e Spring Security OAuth
  • Hibernate
  • Zend Framework
  • Play Framework
  • HTML5 e CSS3.

Implementação

Foi definido um servidor OAuth que fornece uma base de usuários e as funcionalidades de autorizar ou revogar o acesso de aplicações consumidoras. Foram implementados dois consumidores que utilizam este servidor para autenticação, um utilizando Zend Framework que é um sistema simples de cadastro de despesas e outro utilizando o Play Framework que é uma agenda de contatos. Os códigos dos três encontram-se na minha página do GitHub:

Trabalhos Futuros

  • Adicionar os tokens gerados pelo framework Spring Security OAuth a um banco de dados, ao invés de uma fonte de dados volátil como a memória RAM. Isso pode ser implementado criando-se um novo serviço de tokens, que implemente a interface OAuthProviderTokenServices;
  • Após implementar o serviço de tokens mencionado acima, implementar um serviço de consumidores, permitindo que um administrador de sistema cadastre novas aplicações que podem tentar consumir dados dos proprietários de recursos capazes de se autenticar no sistema. Para isso é necessário implementar um novo serviço de consumidores, que implemente a interface ConsumerDetailsService;
  • Com estas duas melhorias implementadas, outro trabalho futuro é a capacidade de listar para o usuário as aplicações que o mesmo autorizou e, permitir que o mesmo possa revogar o acesso das aplicações cadastradas;
  • Outra melhoria é, ao revogar o acesso de uma aplicação, a capacidade de limpar os dados do usuário armazenados nessa aplicação, permitindo que a base de dados não fique inconsistente já que o proprietário do recurso não autoriza mais que o consumidor utilize seus dados.
  • Essas melhorias estão relacionadas à aplicação desenvolvida aqui, porém, quando a versão 2.0 do OAuth, que até esta data encontra-se em rascunho, se tornar uma especificação estável, uma melhoria importante é a estrutura para utilizar esta versão.

O Trabalho

Confira abaixo o PDF contendo o trabalho completo:

Agradecimentos

À minha namorada, aos meus pais e ao orientador professor Diego de Carvalho.

Trabalho de Conclusão de Curso: Proposta de Arquitetura para Desenvolvimento Web Baseada em PHP utilizando Design Patterns, Um Estudo de Caso

Olá a todos, como vão? Algum tempo parado com o blog, apesar de ter dito que agora eu teria mais tempo para me dedicar a ele, não é o que está acontecendo :D . Bom hoje trago para vocês o meu tema de trabalho de conclusão de curso, com o qual conclui minha graduação no Centro de Ensino Superior de Foz do Iguaçu, me tornando Bacharel em Ciência da Computação. Na segunda-feira dia 7 de Dezembro de 2009, apresentei a banca final, defendendo o tema, explanando toda a parte prática (a parte teórica foi apresentada na banca parcial) e ganhando a aprovação dos avaliadores da banca.

Objetivo Geral

Propor uma arquitetura de desenvolvimento de aplicações em PHP contendo design patterns que forneça uma maior estrutura organizacional, padronização de programação, facilidade de manutenção, menos repetição de código e que evite bad smell (algo errado no código que necessita ser refatorado).

Arquitetura Definida

Diagrama da arquitetura definida

Diagrama da arquitetura definida

O fluxo definido por esta arquitetura segue o padrão definido pelo Zend Framework e, também, possui algumas customizações para a comunicação entre cada camada. A estrutura base do framework é baseada no pattern Model-View-Controller (MVC), o que divide a aplicação em Model, View e Controller. Na arquitetura, conforme apresentado na Figura acima ainda existem as camadas: Facade, Data Mapper e Table Data Gateway.

Todo o fluxo inicia-se por uma requisição feita por um usuário, o framework definirá qual o Controller requerido, este então será responsável por tratar a requisição e, utilizando o pattern Factory Method, o Controller obtém a Facade ligada ao caso de uso a que ele corresponde e então delega para esta camada o processamento da lógica referente a regra de negócio.

A Facade poderá utilizar um Data Mapper para obter dados do banco de dados, ou para fazer operações a registros do banco. O Data Mapper irá utilizar o Table Data Gateway para efetuar as operações SQL, que é a linguagem compreendida pelo banco de dados. Ele também poderá mapear os dados vindos do Table Data Gateway para objetos Model, que representam em forma de objetos as entidades do banco de dados.

Existe ainda a implementação do Observer e Observable, que fazem parte do design pattern Observer. Uma classe Observable possuirá métodos para se conectar a Observers e para notificar cada um deles. A classe Observer irá fazer um log das operações notificadas pela Observable, gravando este log em banco de dados, no formato JSON, para permitir uma consulta posterior.

Após todo o processamento das camadas inferiores ser concluído, o Controller irá continuar o fluxo da aplicação, exibindo a View para o usuário, que pode conter os dados pegos pelo Data Mapper, ou os formulários definidos pelos componentes Zend_Form para obter dados para algum registro, ou mensagens relevantes para informar ao usuário.

O design pattern Singleton é implementado por diversos componentes do Zend Framework, como, por exemplo, o Zend_Auth que é utilizado na autenticação de usuários. Com este pattern é possível manter os objetos durante a aplicação e por apenas um ponto de entrada. Isto garante a consistência deste objeto, sabendo sempre o que esperar dele.

Aplicação de Exemplo

Para fazer o estudo de caso foi necessário a elaboração de uma aplicação, esta sendo um sistema simples de controle de bibliotecas. Como não era necessário especificar um cliente real, foram criadas algumas regras de negócio que o sistema devia atender e então construí todo o sistema utilizando a arquitetura. A observação que deixo para quem for analisar a aplicação é que a regra de negócio é sim extremamente simples, e acredito que se fosse aplicar a aplicação a uma biblioteca real existiria muita coisa a se trabalhar, porém com ela foi possível demonstrar o uso da arquitetura e o resultado foi bem satisfatório. Os casos de uso criados são demonstrados no diagrama de casos de uso apresentado na Figura abaixo:

Diagrama de Casos de Uso

Diagrama de Casos de Uso

Conclusões

A principal conclusão apresentada na minha monografia é com relação a manutenibilidade dos sistemas e ciclo de vida. Com uma arquitetura padronizada e altamente reutilizável graças a um ótimo framework e a utilização de design patterns pode-se aumentar bastante o ciclo de vida, principalmente porque desenvolvedores que forem alterar as aplicações já prontas, deverão apenas se familiarizar com os patterns já especificados e reconhecidos mundialmente, e, também, ler a documentação da arquitetura, para saberem onde exatamente alterar as partes necessárias. Os trabalhos futuros são:

  • Tornar a arquitetura independente de framework;
  • Basear a arquitetura em plugins para facilitar a criação e atualização de funcionalidades de sistemas;
  • Escolher entre os design patterns existentes para adicionar ou remover patterns de acordo com a necessidade das aplicações que forem desenvolvidas.

A Monografia

Código-Fonte

O código-fonte com a arquitetura e a aplicação de exemplo poderão ser baixados no link abaixo. Se você tiver melhorias e dicas por favor envie um comentário que ficarei bem agradecido, principalmente se forem coisas construtivas. Bom, é isso, gostaria só de anunciar as boas novas e, também, divulgar esta arquitetura, que ao meu ver ficou muito boa para se trabalhar, e que já estou utilizando em um sistema real… :)

Código-Fonte da Arquitetura

LaTeX no Ubuntu 9.10

Olá a todo, como vão? Como estou tendo a necessidade de reinstalar os pacotes e ferramentas do LaTeX para continuar escrevendo minha monografia, resolvi escrever um artigo rápido explicando os pacotes necessários para ter o LaTeX junto com as ferramentas comumente utilizadas em trabalhos de monografia.

A primeira coisa a se fazer é instalar os pacotes do texlive:

sudo apt-get install texlive

Com ele, os principais pacotes utilizados no LaTeX já serão instalados. Após isso, é hora de se focar nos pacotes que fazem a formatação do trabalho seguindo as normas da ABNT. O primeiro pacote é um requisito exigido pelo pacote da ABNT, para instalar este requisito basta digitar o seguinte comando:

sudo apt-get install texlive-math-extra

Caso este pacote não seja instalado aparecerá o seguinte erro ao compilar um trabalho que utiliza o pacote de normas da ABNT:

LaTeX Error: File `stmaryrd.sty' not found.

Agora, basta instalar o pacote abntex, que é o responsável pela formatação do trabalho nas normas da ABNT:

sudo apt-get install abntex

Os principais pacotes estão instalados, então basta instalar a IDE utilizada na criação dos documentos TEX:

sudo apt-get install texmaker

Existem outras IDEs como, Kyle, porém eu me adaptei bem ao texmaker e ela é minha IDE padrão.

Agora, outra coisa utilizada na monografia é a lista de siglas/símbolos. Para fazer esta lista é utilizado o pacote glossaries. Para instalar o pacote glossaries existem alguns pré-requisitos que devem ser supridos, estes sendo os seguintes pacotes:

  • ifthen;
  • xkeyval;
  • xfor;
  • amsgen.

No meu caso foi necessário apenas o xfor, e o pacote do glossaries em si, baixei eles no seguinte link: http://www.ctan.org/pub/tex-archive/install/macros/latex/contrib/. Os pacotes “tds” são mais fáceis de se instalar, pois já estão configurados, basta jogar no banco de dados do LaTeX e atualizá-lo. Então, após baixar os pacotes: xfor.tds.zip e glossaries.tds.zip, em um terminal basta criar uma pasta para armazenar os pacotes:

mkdir ~/texmf

Extrair os pacotes no diretório:

unzip xfor.tds.zip  -d ~/texmf/
unzip glossaries.tds.zip -d ~/texmf/

E, finalmente atualizar o banco de dados do LaTeX:

texhash ~/texmf/

No meu caso, seguindo todos estes procedimentos, tudo deve estar funcionando. Se alguém encontrar erros por favor postem nos comentários que tentarei ajudar. Como este tutorial visava apenas apresentar os procedimentos para instalação, não incluirei exemplos para fazer os testes de cada um destes pacotes. Se alguém tiver curiosidade e quiser testar se tudo está funcionando, ver como criar as siglas e etc, recomendo o seguinte tutorial: Glossaries, Nomenclature, Lists of Symbols and Acronyms.

Por hoje é só, recomendo o LaTeX a todos que forem fazer a monografia ou demais trabalhos escritos, principalmente devido a falta de preocupação em ficar ajustando a formatação, já que ele faz isso automaticamente, além de diversas outras coisas que ele automatiza. Até a próxima!