Ir para o conteúdo principal

Análise para integração do consumo das informações do Consignação no Portal do servidor (Sistema Consignação)

Data de elaboração 21/08/2023
Responsável pelo estudo
  1. Emanuel Rufino Alcantara de Lima (Analista)
Equipe do estudo
  1. Arthur Leandro dos Anjos Nunes (Product Owner)
  2. André Honório de Andrade Silva (Técnico)
  3. Alef Carvalho (Analista)
  4. Gustavo Felix (Analista)
  5. Thiago Alencar (Estagiário)
Alvo Portal do Servidor
Origem

Implementação: Análise para integração do consumo das informações do Consignação no Portal do servidor 

Objetivo

Levantar as formas de integração para consumo das informações do consignação pelo portal do servidor

Documentação correlata
Observações
1. Objetivo

O Presente estudo objetiva levantar as formas de integração para consumo das informações do consignação pelo portal do servidor.

1.1 JUSTIFICATIVA

O portal do servidor foi criado para facilitar o acesso a várias informações por meio de integrações com diferentes sistemas. Um exemplo disso é o sistema de consignação, que contém informações importantes para o servidor. Para garantir que essas informações sejam exibidas de forma segura, a integração entre o sistema consignação e o portal do servidor deve ser configurada para acessá-las de maneira confiável.

1.2 RESULTADOS ESPERADOS

Espera-se que após a conclusão desse estudo seja possível mostrar como será possível a forma que o portal do servidor acessará as informações do sistema consignação.

2. Introdução

Em um esforço contínuo para melhorar a eficiência e a experiência do usuário, a integração entre tecnologias diferentes desempenha um papel fundamental. No caso em questão, a sinergia entre um portal do servidor construído em .NET e uma API Java Spring Boot oferece uma solução robusta para acessar informações cruciais sobre empréstimos consignados.

Benefícios da Integração:

  1. Acesso a Dados Atualizados: O portal do servidor pode solicitar informações atualizadas diretamente da API, garantindo que os detalhes de empréstimos consignados estejam sempre precisos.
  2. Segurança Reforçada: A integração é projetada para manter altos padrões de segurança. As políticas de autenticação e autorização garantem que apenas usuários autorizados tenham acesso aos dados sensíveis.

  3. Aprimoramento da Experiência do Usuário: A integração transparente permite que os usuários acessem informações de empréstimos consignados sem a necessidade de alternar entre diferentes sistemas.

3. Desenvolvimento

3.1 CENÁRIO ATUAL

Em um cenário digital cada vez mais interconectado, a segurança da informação tornou-se um aspecto crítico para qualquer aplicação. Uma das maneiras fundamentais de proteger recursos e dados é por meio de autenticação robusta em APIs. O Java Spring Boot, um framework de desenvolvimento rápido para aplicações Java, oferece ferramentas poderosas para implementar diversos métodos de autenticação, proporcionando um ambiente seguro para acesso aos endpoints.

O Portal do Servidor .NET:

O portal do servidor, construído na plataforma .NET, proporciona aos funcionários e colaboradores um acesso centralizado a uma variedade de serviços e informações. Com uma interface intuitiva e recursos personalizados, o portal torna a navegação e a interação mais convenientes, otimizando os processos internos.

A API Java Spring Boot:

Do outro lado, a API Java Spring Boot facilita o acesso seguro e eficiente às informações de empréstimos consignados do servidor. Baseada na robusta estrutura do Spring Boot, a API oferece a capacidade de expor dados relevantes por meio de endpoints bem definidos. Isso permite que o portal do servidor recupere os detalhes dos empréstimos consignados de maneira rápida e confiável.

3.2 SOLUÇÃO PROPOSTA

Primeiramente, foi realizado um estudo de como funciona a autenticação no Java Spring Boot. Após isso, foi utilizada a ferramenta do Postman para se verificar a geração do token e o funcionamento da API obtendo-se os dados através das rotas. Posteriormente, foi criada uma funcionalidade no Portal do Servidor, de maneira local, para testar a autenticação e obtenção dos dados. Essa funcionalidade está descrita abaixo como referência para possíveis novas integrações com outros sistemas .NET.

Credenciais

Foi verificado que para se autenticar à API Java SpringBoot, devem ser enviadas as app credentials e as user credentials. Assim será gerado um token JWT (Json Web Token).

App Credentials: _clientId e _clientSecret;

User Credentials: _loginConsignacao e _senhaConsignacao

Para os métodos abaixo, foram utilizadas as seguintes variáveis de ambiente:

UrlConsignacaoApi=https://consignacao.development.local
ConsignacaoAuthUserName={Incluir o clientId aqui}
ConsignacaoAuthPassword={Incluir o secret aqui}
ConsignacaoUserName={Incluir o usuário do sistema aqui}
ConsignacaoPassword={Incluir a senha do usuário do sistema aqui}

1) Método construtor da classe

public ApiConsignacao(IConfiguration configuration)
        {
            UriConsignacaoApi = configuration["UrlConsignacaoApi"];
            _loginConsignacao = configuration["ConsignacaoUserName"];
            _senhaConsignacao = configuration["ConsignacaoPassword"];
            _authorizationUserName = configuration["ConsignacaoAuthUserName"];
            _authorizationPassword = configuration["ConsignacaoAuthPassword"];
            headers = Headers();
        }

 

2) Método Autenticar

private AutenticacaoDto Autenticar()
        {
            string username = _clientId;
            string password = _clientSecret;

            string credentials = $"{username}:{password}";
            byte[] credentialsBytes = Encoding.UTF8.GetBytes(credentials);
            string base64Credentials = Convert.ToBase64String(credentialsBytes);


            var credenciaisParaAutenticacaoDaAplicacao = new Dictionary<string, string>
            {
                { "Authorization", $"basic {base64Credentials}" },
            };

            var credenciaisParaAutenticacaoDoUsuario = new Dictionary<string, string>
            {
                { "username", _loginConsignacao },
                { "password", _senhaConsignacao },
                { "grant_type", "password" }
            };

            var auth = ConsumirApi.ObterToken<AutenticacaoDto>(UriConsignacaoApi, "/oauth/token", Method.POST, credenciaisParaAutenticacaoDoUsuario, credenciaisParaAutenticacaoDaAplicacao);

            return auth;
        }

3) Geração do Token de acesso

public static AutenticacaoDto ObterToken<T>(string uri, string rota, Method metodo, Dictionary<string, string> parameters = null, Dictionary<string, string> headers = null)
        {
            if (!uri.EndsWith("/"))
                uri += "/";
            if (rota.StartsWith("/"))
                rota.Remove(0, 1);

            try
            {
                RestClient client = new RestClient(uri);

                var request = new RestRequest(rota, metodo)
                {
                    RequestFormat = DataFormat.Json
                };

                if (parameters != null)
                {
                    foreach (var param in parameters)
                    {
                        request.AddParameter(param.Key, param.Value);
                    }
                }
                if (headers != null)
                {
                    foreach (var header in headers)
                    {
                        request.AddHeader(header.Key, header.Value);
                    }
                }
                request.AddHeader("Content-Type", "application/x-www-form-urlencoded");

                var response = client.Execute(request);
                var auth = JsonSerializer.Deserialize<AutenticacaoDto>(response.Content);

                return auth;
            }
            catch (Exception e)
            {
                throw e;
            }
        }

Obs: Incluir  o código da linha 32, para definir que os dados estão sendo passados pelo formato "application/x-www-form-urlencoded".

Com o token, basta incluir no headers e passar para o método ConsumirApi, conforme abaixo:

private Dictionary<string, string> Headers()
        {
            var auth = Autenticar();

            return new Dictionary<string, string>
            {
                { "Authorization", $"{auth.token_type} {auth.access_token}" },
            };
        }
public async Task<FuncionarioConsignacaoDto> ObterPorId(int id)
        {
            var funcionario = ConsumirApi.Consumir<FuncionarioConsignacaoDto>(UriConsignacaoApi, $"/funcionario/{id}", Method.GET, null, headers);
            return funcionario;
        }

No caso acima, a variável headers foi atribuída no método construtor da classe.

4. Conclusão

Após uma análise da API do consignação, foi possível descrever o funcionamento e o código para se obter os dados do sistema consignação.