Olá Comunidade !!
Este blog é destinado a compartilhar um pouco dos caminhos que "trilhamos" quando tivemos que integrar o QlikView Server com o MFA corporativo daqui da empresa...
O blog está dividido em 2 partes (Sign In e Sign Out), para uma melhor segmentação das atividades necessárias em cada fase (porém um terceiro foi criado para descrever a implementação de grupos). O ambiente era composto por:
Item | Produto utilizado |
---|---|
Sistema Operacional | Windows Server 2016 Datacenter |
Web Server | IIS v10 |
QVS | QlikView Server Enterprise Edition v12.10 (x64) |
Banco de Dados | PostgreSQL v10 / MySQL 5.7 |
Identity Provider (idP) | MS Azure Active Directory |
Sign In
Inicialmente foi selecionado no QMC (Qlik Management Console) o método de autorização DMS (Document Metadata Service), e também era necessário implementar Single Sign-On (SSO) como processo de autenticação no QVS para se aliar a utilização de Web Ticket. Para esta fase utilizamos como material de apoio o WordPress: Integrating Single Sign On in Qlikview – Part I | BI Experience, seguido das partes II e III, onde criamos as tabelas que comportariam os usuários a serem lidos pelo Directory Service Connector OBDC criado no Setup do QMC (pelo que entendemos, desta forma passava-se não-obrigatória a utilização de senhas pré-cadastradas para os usuários se logarem). Nos bancos de dados PostgreSQL e MySQL fizemos testes que funcionaram para esta finalidade (porém, no PostgreSQL as tabelas requerem declaração das aspas-duplas, conforme abaixo).
Um projeto de MFA foi customizado na IDE Visual Studio, para se conectar a um idP Azure e configurado para utilizar o AppID criado para a aplicação. Exemplo pode ser obtido em: https://docs.microsoft.com/pt-br/azure/active-directory/develop/active-directory-code-samples. Também foi incorporado um módulo MVC escrito em asp.net (disponível em: https://github.com/braathen/qv-webticket) e adaptado dentro do projeto criado, seguindo as orientações presentes em README.md. Este último possui a finalidade de recuperar um webticket para o usuário/grupo (tendo concluído o processo de MFA), para logá-lo no AccessPoint.
No deploy IIS foram usados 2 sites: um criado para aplicação ASPNet (somente com os arquivos os arquivos binários publicados do VS) e outro para "rodar" o AccessPoint QVS (a porta do Web Server tem que ser idêntica no setup do QMC). Todos os componentes necessários (autenticação, protocolos, pools, etc.) foram instalados no IIS, como no exemplo:
Para "ativar" a autenticação via webticket no QVS, usamos a página postada na Comunidade: An introduction to QlikView Security using Web Tickets. Basicamente, os pontos de atenção aqui, foram configurar a autenticação anônima no web server (IIS) para a pasta QvAjaxZfc, e incluir os IP's na whitelist do arquivo config.xml (neste a tag GetWebTicket já existia, então o que fizemos foi expandí-la com a adição das outras linhas, abaixo):
<GetWebTicket url="/QvAjaxZfc/GetWebTicket.aspx">
<TrustedIP>198.168.0.0</TrustedIP>
<TrustedIP>20.300.40.50</TrustedIP>
<TrustedIP>127.0.0.1</TrustedIP>
</GetWebTicket>
Seguindo a ordem; 198.168.0.0: IP do host na rede privada (intranet). 20.300.40.50: IP público do host (internet). 127.0.0.1: a aplicação faz a solicitação do webticket que será usado, para o endereço local (localhost).
Outra ação que que nos ajudou, foi também incluir a página WebTicket.aspx (disponível para baixar no endereço acima), na mesma pasta do GetWebTicket.aspx - dentro de QvAjaxZfc, para testar a geração de tickets manualmente e incluir numa URL de teste diretamente no browser, no padrão descrito pelo Pablo Soto, aqui: Qlikview WebTicket Issue (lembrar depois de retirá-la da pasta usada, quando em Produção), e o uso do binário no projeto postado pelo Amiem Amiem: Tool which test QlikView Webtickets que gera o ticket e permite ver o resultado diretamente no browser padrão.
Sign Out
Uma vez que a solução MVC fora implementada, nesta fase era necessário que a rotina de logout do usuário redirecionasse para a página da solução asp.net novamente (ao invés da página default, FormLogin.htm). Assim foram necessárias duas ações:
1. adicionar um bloco de código na mesma página para que resolvesse a página da solução quando iniciada no browser do usuário;
2. customizar o arquivo "C:\Arquivos de Programas\QlikView\Web\js\accessPoint.js", incluindo um bloco de código para que ao usuário clicasse no link de Sign Out do portal, houvesse o redirecionamento para a aplicação, ao invés da página padrão do QVS (FormLogin.htm).
Na página padrão FormLogin.htm foi incluída a tag, na seção <head>:
<script type="text/javascript">
if(window.location.origin == "http://subdomain.domain:port"){
window.location.replace("https://subdomain.domain/Home/Logout")
}
else {
location.reload()
}
</script>
Neste caso, o endereço de login padrão permaneceu inalterado (opção "Alternate login page web form", no Setup do QMC), mas a página redireciona diretamente para a aplicação MFA ao ser acessada, invés da coleta de credenciais.
Utilização de Grupos de Authorization
Por fim, foi necessária a criação de grupos de usuários de modo a melhorar a governança do AccessPoint. Para isso, além do insert dos grupos nas tabelas indicadas para o SSO, também precisamos "ajustar" a requisição do ticket no módulo MVC, informando junto com o usuário pesquisado no Banco de dados, o valor do grupo ao qual pertence (ou valores, se cadastrado em mais de um grupo), previamente recuperado do Banco de dados.