Árvore de páginas


01. DADOS GERAIS

Produto:

TOTVS Logística Recintos Aduaneiros

Linha de Produto:

Linha Logix

Segmento:

Logística

Módulo:Serviço de autenticação OAuth2
Função:Serviço de autenticação OAuth2
Ticket:
Requisito/Story/Issue (informe o requisito relacionado) :
  1. DLOGPORTOS-15862
  2. DLOGPORTOS-16156


02. SITUAÇÃO/REQUISITO

Para atendimento da demanda de autenticação, para o produto TOTVS Recintos Aduaneiros, através do protocolo OAuth2 foram estabelecidas a condições para o estabelecimento da sessão de usuário junto ao ecossistema Recintos Aduaneiros.

03. SOLUÇÃO

Como descrito no artigo sobre o modelo de sessão adotado para o TOTVS Recintos Aduaneiros, foi desenvolvida uma API RESTful que provê a estrutura necessária para a efetivação de sessões de usuário para utilização do sistema. Esta API foi desenvolvida como um módulo para o servidor web Apache (https://httpd.apache.org/), em sua versão 64 bits para sistemas operacionais Microsoft Windows e Linux de 64 bits. Isso facilita sua distribuição e implantação, versatilizando sua utilização. Por poder ser implantada em ambientes Linux, isso permite que ela seja abrigada em imagens Docker que rodem sob um container Kubernets, o qual pode gerenciar recursos de forma inteligente e prover uma alta escalabilidade para o serviço.

Sendo assim, para implantar e configurar a API OAuth2 é necessário possuir um servidor web Apache ativo e um servidor de banco de dados Redis instalado junto ao servidor web Apache, uma vez que os parâmetros de configuração e sessão estarão abrigados nele.

Para implantação da API OAuth2 é necessário:

  1. Sistema operacional 64 bits compatível (Linux/Microsoft Windows);
  2. Servidor web Apache 64 bits versão 2.4 (versão homologada: 2.4.47 e superiores);
  3. Servidor Redis versão 3.2 (versão homologada: 3.2.100 e superiores)
  4. 512 MB de memória RAM (mínimo);
  5. Processador 1,6 GHz (mínimo) e;
  6. 25 MB de espaço disponível em disco.

A instalação da API em sistemas operacionais Linux depende, em todos os casos, da distribuição adotada. Em distribuições baseadas na distribuição Ubuntu, é necessário disponibilizar a API no diretório /usr/lib/apache2/modules, conforme imagem abaixo:

Além disso, é necessário criar os arquivos authentication.loadauthentication.conf no diretório /etc/apache2/mods-available, conforme imagem abaixo:

O conteúdo do arquivo authentication.load é:

Arquivo authentication.load
LoadModule authentication_module modules/mod_authentication.so

Já o conteúdo do arquivo authentication.conf é:

Arquivo authentication.conf
<IfModule authentication_module>
  <Location /api/sara/authentication/v1>
    SetHandler mod_authentication-handler
  </Location>
</IfModule>

Configuradas as opções de carregamento da API através do servidor web Apache, é necessário criar o arquivo de configuração da API em /etc/authentication/authentication.conf conforme indicado abaixo:

# Este é o arquivo de configuração da API de autenticação OAuth2 do 
# ecossistema Recintos Aduaneiros. Assim como o arquivo de configuração
# do Apache, as configurações aqui seguem o padrão "chave valor",
# sendo assim, tanto chaves quanto valores contém uma única palavra.
#
# Comentários podem ser feitos adicionando o símbolo # como primeiro
# caractere da linha. Isso também pode ser utilizado para desativar
# configurações.

# Definições de acesso ao banco de dados 
#
# DriverID: Driver utilizado para a conexão com o banco de dados
# Server: Nome do servidor onde a instância do banco de dados está instalada
# Port: Porta pela qual o banco de dados pode ser acessado
# Name: Nome do banco de dados a ser acessado
# User: Nome do usuário de acesso ao banco de dados
# Password: Senha usada pelo usuário para acesso ao banco de dados (criptografada)
# Charset: Conjunto de caracteres utilizado pelo banco de dados

CharSet SQL_Latin1_General_CP1_CI_AS
DriverID MSSQL
Database sara_db
Hostname NOME_DO_HOST\NOME_DA_INSTANCIA
Password SENHA_DO_USUARIO
Port 1433
Username NOME_DO_USUARIO

# Definições de parâmetros de sessão
#
# TokenTTL: Tempo de vida do token gerado pela API, em minutos
# RefreshTokenTTL: Tempo de vida do token de atualização gerado pela API
# CanRefreshBeforeExpirates: Flag que indica se o token de sessão pode ser atualizado antes da expiração
#
TokenTTL 20
RefreshTokenTTL 5
CanRefreshBeforeExpirates false

Com as configurações efetivadas, é necessário ativar o módulo da API através do comando abaixo:

sudo a2enmod authentication

E reiniciar o servidor web Apache através do comando abaixo:

$ sudo service apache2 restart

Para implantação da API em servidores com sistema operacional Microsoft Windows é necessário disponibilizar seu módulo no diretório de módulos da instalação do servidor web Apache, conforme imagem abaixo:

Após a disponibilização do arquivo, é necessário editar o arquivo httpd.conf constante na instalação do servidor web Apache, acrescentando as linhas a seguir:

LoadModule authentication_module modules/mod_authentication.so

<IfModule authentication_module>
  <Location /api/sara/authentication/v1>
    SetHandler mod_authentication-handler
  </Location>
</IfModule>

Como parte da configuração da API, é necessário criar seu arquivo de configuração em C:\TOTVS\etc\authentication.conf com o conteúdo abaixo:

# Este é o arquivo de configuração da API de autenticação OAuth2 do 
# ecossistema Recintos Aduaneiros. Assim como o arquivo de configuração
# do Apache, as configurações aqui seguem o padrão "chave valor",
# sendo assim, tanto chaves quanto valores contém uma única palavra.
#
# Comentários podem ser feitos adicionando o símbolo # como primeiro
# caractere da linha. Isso também pode ser utilizado para desativar
# configurações.

# Definições de acesso ao banco de dados 
#
# DriverID: Driver utilizado para a conexão com o banco de dados
# Server: Nome do servidor onde a instância do banco de dados está instalada
# Port: Porta pela qual o banco de dados pode ser acessado
# Name: Nome do banco de dados a ser acessado
# User: Nome do usuário de acesso ao banco de dados
# Password: Senha usada pelo usuário para acesso ao banco de dados (criptografada)
# Charset: Conjunto de caracteres utilizado pelo banco de dados

CharSet SQL_Latin1_General_CP1_CI_AS
DriverID MSSQL
Database sara_db
Hostname NOME_DO_HOST\NOME_DA_INSTANCIA
Password SENHA_DO_USUARIO
Port 1433
Username NOME_DO_USUARIO

# Definições de parâmetros de sessão
#
# TokenTTL: Tempo de vida do token gerado pela API, em minutos
# RefreshTokenTTL: Tempo de vida do token de atualização gerado pela API
# CanRefreshBeforeExpirates: Flag que indica se o token de sessão pode ser atualizado antes da expiração
#
TokenTTL 20
RefreshTokenTTL 5
CanRefreshBeforeExpirates false

Tendo efetivado a construção do arquivo de configuração da API, é necessário reiniciar o servidor web Apache através de seu gestor de serviços ou o gestor de serviços do sistema operacional.

Para configuração da API OAuth2, é necessário editar o arquivo de configuração authentication.conf definindo seus parâmetros conforme abaixo:

ConjuntoParâmetroDescriçãoValor padrãoFormatoStatus
Banco de dadosCharSetConjunto de caracteres utilizado pelo banco de dados.SQL_Latin1_General_CP1_CI_ASNenhumImplementado
Banco de dadosDriverIDIdentificador do tipo de conexão com o banco de dados.MSSQLNenhumImplementado
Banco de dadosDatabaseNome do banco de dados a ser conectado.sara_dbNenhumImplementado
Banco de dadosHostnameNome do servidor e instância de instalação do banco de dados.NOME_DO_SERVIDOR\INSTANCIA^[\w]+\\[\w]+$Implementado
Banco de dadosPasswordSenha do usuário de acesso ao banco de dados.NenhumNenhumImplementado
Banco de dadosPortPorta de conexão com o banco de dados.14331~65535Implementado
Banco de dadosUsernameNome do usuário de conexão com o banco de dados.saNenhumImplementado
APITokenTTLTempo de vida do token gerado pela API, em minutos.201~1440Em implementação
APIRefreshTokenTTLTempo de vida do token de renovação gerado pela API.51~1440Em implementação
APICanRefreshBeforeExpiratesFlag que indica se o token de sessão pode ser atualizado antes da expiraçãoFalseTrue/FalseEm implementação

É importante notar que entre os parâmetros e seus valores deve haver apenas espaço em branco. Se esta regra não for obedecida, a configuração adotará o valor padrão por considerar inválida a opção.

Após implantada e configurada, a API responderá conforme o endereço exposto pelo servidor (Ex.: https://localhost/api/sara/authentication/v1/session/token). Assim como é definido no protocolo OAuth2, as requisições devem ser feitas através do método POST, com formato application/x-www-form-urlencoded, conforme imagem abaixo, para uma solicitação Password Grant:

Para solicitações Client Credentials, deve-se solicitar conforme imagem abaixo:

É possível configurar, através do aplicativo Postman, as credenciais para acesso à API e obtenção, uso e renovação do token de sessão, conforme imagens abaixo:

Caso haja uma tentativa de renovação do token de sessão antes do período permitido - caso o parâmetro CanRefreshBeforeExpirates esteja setado como false -, a API emitirá um erro 401 (Unauthorized), conforme imagem abaixo:

E, no caso de todos os requisitos serem satisfeitos para a renovação, a API responderá com um novo conjunto de tokens, conforme imagem abaixo:


04. DEMAIS INFORMAÇÕES

Para maiores informações acerca do protocolo OAuth2, o artigo disponível aqui traz informações mais abrangentes sobre o assunto.

05. ASSUNTOS RELACIONADOS