Autenticação de Usuários no Lumis Portal

Objetivos

  • Conceituar o mecanismo de autenticação no Lumis Portal;
  • Apresentar algumas possibilidades de autenticação no Lumis Portal;
  • Apresentar o serviço nativo para Login no Portal;
  • Entender a visualização dos dados no XML do serviço de Login e exemplificar a customização da apresentação via XSL;

Referências Complementares

Mecanismo de Autenticação no Lumis

Um mecanismo de autenticação é uma funcionalidade (ou um conjunto de funcionalidades organizadas para este fim) que tem por finalidade identificar que usuário está utilizando o portal, possibilitando a identificação de grupos/perfis de acesso, permissões, dados pessoais e outras informações associadas a cada um dos usuários do Portal.

É bastante comum encontrar diferentes requisitos para autenticação em cada aplicação desenvolvida.

Em alguns casos um mecanismo simples de autenticação com consulta a dados armazenados em uma base é suficiente para atender às necessidades de um projeto. No entanto, é possível haver a necessidade de implementação de mecanismos mais robustos, consultando credenciais de acesso dos usuários em uma base como o Active Directory (AD) do Windows Server, por exemplo.

O Active Directory é um serviço de diretório que permite o gerenciamento de informações e acesso a recursos e serviços de redes Windows. Segue breve descrição da ferramenta, extraída do site da Microsoft na Internet (em “http://technet.microsoft.com/pt-br/library/cc668412.aspx - Introdução ao Active Directory – Parte 1”):

“(...) Serviço de diretório é um conjunto de Atributos sobre recursos e serviços existentes na rede, isso significa que é uma maneira de organizar e simplificar o acesso aos recursos de sua rede centralizando-os; Bem como, reforçar a segurança e dar proteção aos objetos da database contra intrusos, ou controlar acessos dos usuários internos da rede. (...)”

O Lumis Portal possui um mecanismo nativo para autenticação de usuários que atende a maioria dos casos e é bastante versátil, permitindo a extensão do funcionamento para contemplar requisitos mais específicos.

A tabela 1 contém uma descrição das opções de autenticação que podem ser adotadas no Lumis Portal, incluindo exemplos de cenários.

Tabela 1

Tipo de Autenticação

Cenário

JAAS

Autenticação utilizando o padrão Java Authentication and Authorization Service.

Autenticação Integrada

Utilização de credenciais de acesso utilizadas na rede de trabalho, como a utilização de dados do Active Directory, por exemplo.

De acordo com documentação da Oracle, Java Authentication and Authorization Service, ou simplesmente JAAS, é um framework que permite a autenticação e autorização de usuários de forma plugável permitindo que as aplicações permaneçam desacopladas das tecnologias de autenticação implementadas, visto que a definição da estratégia utilizada é feita em tempo de execução, com a implementação definida em um arquivo de configuração de login.

Mais adiante serão apresentados detalhes sobre as ações necessárias para implementação utilizando algumas estratégias/ferramentas mencionadas na Tabela 1. Vale lembrar que estas não são as únicas possibilidades, e que o Lumis Portal permite a adoção de qualquer outra técnica/estratégia através da customização do serviço nativo de Login ou criação de um novo serviço que pode ser plugado ao Portal.

O Serviço Nativo de Login

O Lumis Portal possui um serviço nativo para autenticação no Portal chamado “Login”. Este serviço utiliza a base de dados do portal em questão para identificar as credenciais de acesso de cada usuário e verificá-la a cada tentativa de autenticação.

O Lumis utiliza o ProcessAction LoginProcessActionHandler para executar o procedimento de autenticação no portal. Esta classe segue o fluxo descrito abaixo:

O serviço nativo de Login possui três interfaces para interação com os usuários, descritas a seguir:

Interface de Login

A interface de Login permite que os usuários informem suas credenciais de acesso para acessarem as áreas restritas do portal. Esta interface possui dois campos, “Login” e “Senha”, e quando submetida redireciona o usuário para a página inicial (‘home’) do portal em questão (ou para a mesma página de autenticação, em caso de erro nas credenciais informadas).

image001.jpg

Figura 1 - Interface de Login

A Figura 1 apresenta uma página (sem layout) com esta interface instanciada.

É comum redirecionar o usuário para a página de Login quando este tentar acessar alguma área restrita do portal antes de efetuar sua autenticação (Login). Este comportamento é assegurado pelo Lumis, que nestes casos redireciona o usuário para sua página padrão de Login.

No entanto, algumas aplicações podem ter necessidade de diagramar uma página própria para onde o usuário deve ser direcionado nestes casos. O Lumis Portal permite a criar uma página personalizada de Login para um Portal (através da área “Configuração”, menu “Páginas Padrão”) em substituição à sua página padrão.

A Figura 2 demonstra a criação de uma página padrão de login no Portal.

No campo “Página” deve-se selecionar uma página (previamente criada no portal) a ser utilizada como página padrão de login; No campo “Tipo” deve-se escolher a opção “Página de Login”; o campo “WebSite” permite definir a abrangência da página padrão de login que está sendo criada (todos os websites instalados na instância do Lumis ou para apenas algum domínio específico, permitindo uma página de login para cada domínio).

image002.jpg

Figura 2 - Criação de Página Padrão de Login

Interface de Logout

A interface de Logout permite a um usuário previamente autenticado pela interface de Login encerrar sua sessão autenticada. A partir deste momento não será permitido o acesso a áreas restritas, até que seja efetuada nova autenticação.

Esta interface, bastante simples, é composta por um botão para efetuar o Logout do portal e uma mensagem de boas-vindas ao usuário logado. Após efetuar o Logout o usuário é redirecionado para a página padrão de Login (original ou customizada, caso tenha sido configurada) onde poderá se autenticar novamente no portal.

A mensagem de boas-vindas pode ser configurada através da chave “STR_WELCOME_MSG” no arquivo de strings (de acordo com o idioma escolhido) do serviço.

image003.jpg

Figura 3 - Interface de Logout

A Figura apresenta uma página (sem layout) com esta interface instanciada.

Interface de Alteração de Dados Cadastrais

Esta interface permite que o usuário previamente autenticado no portal atualize seus dados cadastrais, inclusive senha, como demonstrado pela Figura 4.

Os dados informados nos campos “Senha” e “Confirme a senha” não são apresentados de forma legível por questões de segurança. Após a confirmação do formulário, o campo senha é gravado na base de dados utilizando um algoritmo de criptografia, visando manter a segurança das informações.

O algoritmo de criptografia e seu tipo podem ser alterados no arquivo de configuração “xml” (disponível em PORTAL/lumisdata/config), através do nó “<encryption>”.

Customizando as Interfaces de Apresentação do Serviço, via XSL

As interfaces disponibilizadas pelo Lumis Portal podem ser customizadas com a criação de arquivos de estilos para definição do formato em que as informações serão apresentadas, aplicando as transformações necessárias nos dados disponibilizadas pelo XML gerado pelo serviço.

Para customizar a apresentação dos dados podemos criar novos estilos (baseados estilos pré-existentes ou criando novos arquivos, em branco) contendo o código desejado para customizar a exibição. Outros artigos descrevem e exemplificam o processo de criação de XSL´s para customização da apresentação das informações.

Na próxima seção será apresentado um exemplo de customização para a interface de Logout.

Exemplo de Customização do Serviço Login - Criando Novo XSL para Logout:

Por ser uma interface bastante simples pode ser incomum customizar esta interface, no entanto podemos imaginar o seguinte caso:

O nome apresentado pelo Lumis na mensagem de boas-vindas inclui apenas o primeiro nome do usuário logado. Imagine que seja necessário exibir Nome e Sobrenome, além de seu login no portal.

Sabendo que estas informações encontram-se presentes no XML gerado para a interface em questão (ou, no caso, estão disponíveis em ‘cookies’), percebe-se não ser necessária qualquer customização no serviço, apenas em sua camada de apresentação.

Portanto, para atender a esta necessidade criaremos um novo Estilo para a interface (com base no Estilo padrão “Logout”) e o alteraremos para contemplar os requisitos definidos. A Figura 5 contém a tela no momento da criação deste novo estilo.

image005.jpg

Figura 5 - Criação de Estilo Customizado

Após a criação deste novo estilo, customizaremos a exibição da mensagem de boas-vindas para se adequar à necessidade.

O quadro a seguir contém o código original do XSL padrão do serviço que iremos customizar. Os pontos em negrito serão alterados.

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!-- $Revision: 9459 $ $Date: 2008-06-30 11:44:14 -0300 (Mon, 30 Jun 2008) $ -->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:import href="../../../lumis/doui/style/DouiControls.xsl" />
<xsl:output omit-xml-declaration = "yes" />

                <xsl:template match="control[@type='lum_text' and @id='welcomeMessage']">
                                <xsl:value-of select="data" disable-output-escaping="yes" />,

                                <span id="{@id}.userName"></span>
                                <script type="text/javascript">
                                                var userName = LumisPortal.getCookie('lumUserName');
                                                if (userName != null) {
                                                                var spanElem = document.getElementById('<xsl:value-of select="@id"/>.userName');
                                                                if (spanElem.innerText != undefined)
                                                                                spanElem.innerText = userName;
                                                                else spanElem.textContent = userName;
                                                }
                                </script>
                                <noscript>
                                                <xsl:text disable-output-escaping="yes">
                                                                &lt;!--Lumis portal script--&gt;
                                                </xsl:text>
                                </noscript>
                </xsl:template>

</xsl:stylesheet>

O quadro a seguir contém o trecho alterado, fazendo com que a interface de Logout apresente, com estes ajustes, também o login do usuário autenticado. A Figura 6 apresenta a interface de Logout após a customização.

<script type="text/javascript">
                var userName = LumisPortal.getCookie('lumUserName');
                var userLogin = LumisPortal.getCookie('lumUserLogin');
                if (userName != null) {
                                var spanElem = document.getElementById('<xsl:value-of select="@id"/>.userName');
                                if (spanElem.innerText != undefined)
                                                spanElem.innerText = userName + ' (Login: ' + userLogin + ')'; 
                                else
                                                spanElem.textContent = userName + ' (Login: ' + userLogin + ')';
                }
</script>
image006.jpg

Figura 6 - Interface de Logout Customizada

Extensão do Serviço de Login

Além da possibilidade de utilização do serviço nativo de Login do Lumis Portal, é possível estender as possibilidades criando um novo serviço para esta necessidade e plugando-o ao portal.

Neste caso podem ser utilizadas diversas ferramentas, como consumo de WebServices, acesso a bases externas ou a arquivos de texto para recuperação das informações sobre os usuários, e implementar métodos para autenticação no portal utilizando sua API.

Nas próximas seções serão abordados exemplos de ferramentas que podem ser utilizadas para estender as possibilidades do mecanismo de autenticação padrão do Lumis Portal.

Sincronização de Dados de Usuários e Grupos

Um requisito bastante comum em intranets corporativas diz respeito a utilizar a base de usuários cadastrados no Active Directory de determinado servidor, centralizando as informações sobre os usuários que terão acesso à ferramenta.

Um caso comum de facilidade que se adquire com esta estratégia é a criação de novos usuários. Caso não houvesse possibilidade de utilização dos dados do Active Directory, seria necessário cadastrar cada novo usuário de forma manual e redundante no portal.

O Lumis Portal possui um mecanismo de fácil utilização para integração com esta ferramenta, através da criação de arquivos de configuração (em XML) contendo as informações para obtenção dos dados de acesso dos usuários.

image007.jpg

Figura 7 - Administração de Configuração de Importação de Usuários e Grupos

Com as configurações necessárias estabelecidas, pode-se gerar um arquivo XML contendo os dados obtidos e, posteriormente, importar o arquivo gerado para a base de usuários do portal.

image008.jpg

Figura 8 - Geração de XML para Importação

image009.jpg

Figura 9 - Importação de XML gerado

O Lumis Portal oferece ainda a opção de sincronização automática de informações de usuários e grupos. Para utilizar esta funcionalidade é necessário ativar a opção “Agendar Execução Automática” nas telas de Geração e Importação de XML de dados de usuários e grupos, como mostrado na Figura 10.

image010.jpg

Figura 10 Sincronização Automática Habilitada

Com esta opção selecionada, os dados serão sincronizados automaticamente pelo Lumis Portal uma vez por dia utilizando as configurações previamente definidas no arquivo criado na área “Arquivos de Configuração” da funcionalidade, apresentado na Figura 7.

Extensão da Autenticação Utilizando WebServices

Outra abordagem bastante comum atualmente é a utilização de serviços web para obtenção de dados de usuários para autenticação e eventual execução de procedimentos pós-autenticação.

Para tanto, o Lumis permite a extensão do mecanismo de autenticação padrão para que possam ser executadas outras operações durante o processo de autenticação.

O Lumis utiliza um tipo de ProcessAction para execução do processo de Login – a classe LoginProcessActionHandler.

Esta classe executa basicamente três operações/actions (diretamente ligadas às três interfaces do serviço de Login), sendo:

Uma maneira fácil de incluir funcionalidades nesse mecanismo é a extensão direta da classe LoginProcessActionHandler com a sobrescrição (overriding) do seu método público “processAction”. No caso de criação de um novo serviço de Login (customizado), este deveria ter a chamada para o novo ProcessAction de Login em seu arquivo Doui.xml.

A classe a seguir demonstra um exemplo de como esta customização poderia ser desenvolvida:

public class LoginCustomizadoProcessActionHandler extends LoginProcessActionHandler {
                @Override
                /**
                 * Sobrescrita do método principal para execução de
                 * outros procedimentos
                 */
                public void processAction() throws PortalException {
                                /*
                                 * Neste ponto podem ser executadas ações diversas antes da execução
                                 * da autenticação via API do Lumis 
                                 */
                               
                                /*
                                 * Chamada à API padrão para autenticação do usuário
                                 */
                                super.processAction();
                               
                                /*
                                 * Mais códigos personalizados, agora após a execução do process
                                 */
                                addDefaultResponse();
                               
                }
}

Mecanismos de Autenticação

O Lumis oferece duas formas de utilizar os recursos da rede para prover autenticação no portal, sendo elas JAAS e Autenticação Integrada.

Quando utilizamos mecanismo de autenticação via JAAS, normalmente há páginas responsáveis por receber as credenciais dos usuários e transmiti-las para o mecanismo de autenticação, via HTTP, com o processamento do login em implementações da interface LoginModule.

Enquanto isso, o mecanismo de autenticação integrada permite a utilização das credenciais de usuários utilizadas na rede de trabalho, fazendo que com que os usuários, uma vez que autenticados na rede, tenham acesso aos recursos do portal. Nestes casos, para redes Windows pode-se inclusive utilizar o protocolo NTLM ou o Active Directory, através do Kerberos Security Package (que implementa o Kerberos Protocol).

Utilizando este mecanismo, a autenticação via portal (utilizando serviço de login, nativo ou customizado) torna-se algo como uma contingência para casos onde não exista a possibilidade de conectar-se à rede, sendo necessário conectar-se ao portal via Internet.

As duas opções de autenticação no Lumis Portal introduzidas acima serão abordadas em maior detalhe nas seções a seguir.

JAAS

O Lumis pode trabalhar com quatro tipos diferentes de autenticação utilizando o padrão JAAS (definido no início deste artigo), sendo elas:

  • Autenticação nativa do Lumis, utilizando o LumisLoginModule;
  • Autenticação utilizando KrbLoginModule no Active Directory;
  • Autenticação direto no banco utilizando o DatabaseLoginModule;
  • Autenticação utilizando um LoginModule customizado.

Caso uma solução opte por implementar um mecanismo de autenticação baseado em JAAS, o processo estará centrado na utilização de um LoginModule (ou implementação, caso escolha criar um LoginModule customizado).

A interface LoginModule é um dos componentes do mecanismo de autenticação providos pelo JAAS, que permite a implementação de diversos tipos de tecnologias de autenticação de forma plugável e configurável.

Por exemplo, caso seja necessário alterar o formato padrão da autenticação do Portal, pode-se implementar um novo LoginModule com as configurações necessárias (acesso a base externa, web services, etc) e plugá-lo à autenticação do Lumis Portal através de arquivo de configuração (em lumisdata/config/lumissecuritylogin.config).

Detalhes sobre a configuração destes tipos de autenticação podem ser encontrados no Manual do Lumis Portal (na seção de “Autenticação” em “Instalação e Configuração”), e referências adicionais sobre a criação e configuração de LoginModule customizado podem ser encontradas no Reference Guide da ferramenta “JavaTM Authentication and Authorization Service”, disponível em http://download.oracle.com/javase/6/docs/technotes/guides/security/jaas/JAASRefGuide.html).

Autenticação Integrada

A autenticação integrada é realizada através da implementação da interface IHttpAuthenticator, configurada no lumisportalconfig.xml. Mais detalhes sobre este tipo de autenticação podem ser encontrados no Manual do Lumis Portal, na seção de “Autenticação” em “Instalação e Configuração”.

A interface IHttpAuthenticator possui um contrato bastante simplificado para a execução da autenticação, contendo apenas um método (o método “authenticate“). Esta interface pode ser implementada para customizar o processo de autenticação do portal; mais detalhes sobre esta interface podem ser encontrados na documentação do produto (vide JavaDoc da classe).

O mecanismo de autenticação integrada pode também utilizar o protocolo NTLM (NT LAN Manager), da Microsoft. Este é um protocolo de autenticação e negociação de segurança utilizado em diversos sistemas da Microsoft® para prover autenticação integrada.

Para a utilização desta estratégia de autenticação é necessário efetuar algumas alterações nos arquivos de configuração do portal. Detalhes sobre estas configurações podem ser encontradas no manual do produto (na seção de “Autenticação” em “Instalação e Configuração”).

Para mais informações sobre NTLM e sua utilização podem ser obtidas diretamente no site da Microsoft, em http://msdn.microsoft.com/en-us/library/aa378749(v=vs.85).aspx.

Principais Pontos para Abordagem Prática

Autor: Marcelo Zeferino (Lumis)

Atualizado em 16.02.2012

  1. Identificação do tipo de transação iniciada (login, logout ou alteração de dados cadastrais);
  2. Execução do procedimento
    1. Em caso de Login:
      1. Recuperação dos dados informados na interface e execução do login;
      2. Atualização do objeto, responsável por armazenar diversas informações relacionadas a sessão autenticada iniciada pelo processo de login, com os dados do usuário logado;
      3. Chamada a métodos internos para adição de Cookies contendo as informações do usuário logado (, lumUserName e lumUserLogin);
    2. Em caso de Logout:
      1. Execução de logout do usuário;
      2. Exclusão de Cookies adicionados no Login;
      3. Destruição da sessão iniciada com a autenticação;
    3. Em caso de atualização de dados cadastrais:
      1. Validação de dados informados, incluindo uma validação da nova senha por meio de digitação redundante;
      2. Atualização das informações na base de dados;
  • lum_actionLogin:
    • Quando é solicitada a operação de login do usuário;
    • Interface Associada: Interface de Login;
    • Método Executado: processLoginAction;
  • lum_actionLogout:
    • Quando é solicitada a operação de logout do usuário logado;
    • Interface Associada: Interface de Logout;
    • Método Executado: processLogoutAction;
  • lum_actionUpdateInfo:
    • Quando é solicitada a operação de atualização de informações cadastrais dos usuários;
    • Interface Associada: Interface de Atualização de Dados Cadastrais;
    • Método Executado: processUpdateAction;
  • Criação novos Estilos para Interfaces do Serviço;
  • Criação de serviço personalizado de Login, com obtenção de dados em fonte externa;