Artigo
· Fev. 14 5min de leitura

HTTP e HTTPS com API REST

HTTP e HTTPS com API REST

 

Olá,

O protocolo HTTP permite a obtenção de recursos, como documentos HTML. É a base de qualquer troca de dados na Web e um protocolo cliente-servidor, o que significa que as requisições são iniciadas pelo destinatário, geralmente um navegador da Web.

As API REST se beneficiam deste protocolo para trocar mensagens entre cliente e servidor. Isso torna as APIs REST rápidas, leves e flexíveis. As API REST utilizam os verbos HTTP GET, POST, PUT, DELETE e outros para indicar as ações que desejam realizar.

Quando realizamos uma chamada a uma API RESt na verdade o que ocorre é uma chamada HTTP. A API recebe esta chamada e de acordo com o verbo e o caminho solicitados a API executa a ação desejada. No caso da implementação em Iris podemos ver isso claramente na área de definição da URLMap:

XData UrlMap
{
<Routes>
        <Route Url="/cliente" Method="POST" Call="Incluir"  Cors="true"/>
        <Route Url="/cliente/:chave" Method="PUT" Call="Alterar"  Cors="true"/>
        <Route Url="/cliente/:chave" Method="DELETE" Call="Deletar"  Cors="true"/>
        <Route Url="/cliente/:chave" Method="GET" Call="Pesquisar"  Cors="true"/>
        <Route Url="/cliente" Method="GET" Call="Listar"  Cors="true"/>
    </Routes>
}

Veja que temos o caminho (Url) e o verbo (Method) definido para cada chamada (Call). Assim o código que atende a API sabe o que deve realizar.

Quando utilizamos o HTTP temos que ter em mente que os dados que estamos trafegando estão abertos, ou seja, não estão protegidos por nenhum tipo de criptografia ou segurança. Qualquer um que tenha condição de capturar o pacote de dados trafegado poderá ver o que está sendo transferido entre o cliente e o servidor.

Vamos, por exemplo, ver a chamada a uma API REST que utiliza a Basic Authentication. Para isso vamos usar o Postman como cliente, acessando uma API REST no Iris e vamos usar o TCPTrace para fazer o forward dos dados e visualizar o que trafegou.

Primeiro vamos publicar nossa API. Vamos utilizar a mesma API do artigo https://community.intersystems.com/post/using-rest-api-flask-and-iam-intersystems-iris-part-1-rest-api

Basta então seguir as orientações e utilizar o código que o artigo disponibiliza para termos nossa API publicada.

Agora vamos ativar o TCPTrace. Ele pode ser obtido facilmente na web. Voc~e também pode utilizar qualquer outro software que faça o forward de pacotes TCP/IP:

 

Configure o TCPTrace para escutar na porta 8080 e desviar para o servidor que atenderá a requisição na porta 80, que é a porta padrão do protocolo HTTP:

 

 

Abrindo o Postman vamos consumir nossa API, só que vamos mudar a nossa chamada. Não vamos chamar o servidor de destino, e sim o local onde o TCPTrace está escutando as chamadas:

Veja que realizamos um GET e recebemos um STATUS code 200 (sucesso). Usamos autenticação para acessar nossa API e recebemos o pacote de informação como resposta.

Agora vamos ver o TCPTrace:

Veja que tudo que trafegou está visível. As credenciais de autenticação estão no header Authorization como uma string Base64:

 

 

Tudo que trafegou está acessível e visível para quem coletou os dados. Isso pode se tornar potencialmente perigoso quando transferimos dados sensíveis. Mas como podemos resolver o caso? Podemos ativar o HTTPS no nosso web server, o que coloca uma camada de criptografia na nossa comunicação.

A ativação do HTTPS exige a instalação de um certificado SSL no web server. Existem entidades autenticadoras que emitem certificados que são válidos e reconhecidos na web, ou podemos utilizar os chamados certificados auto-assinados. Os certificados auto-assinados não são reconhecidos automaticamente, e nem sempre é uma solução de segurança recomendada, então sempre verifique qual tipo de certificado voc~e deve utilizar.

No nosso caso vamos utilizar um certificado auto-assinado pois ele atende a nossa demanda de segurança, ou seja, criptografar o nosso tráfego.

A instalação do certificado e ativação do HTTP depende do seu web server. Procure a documentação apropriada e veja como criar e instalar o certificado e ativar o HTTPS.

Para este artigo estamos utilizando o IIS que tem disponível uma opção de criação de certificado auto-assinado.

Uma vez ativo o HTTPS vamos testar nosso servidor web. Ele atende as requisições HTTPS na porta padrão 443, ou informando o protocolo “https” na chamada da URL.

Vamos fazer um teste. Abra seu navegador e acesse o web server com o https:

Veja que o navegador informou que sua conexão não é privada. Isso acontece por conta do certificado auto-assinada que não é reconhecido automaticamente, Clique em Avançado:

Agora o navegador completou as informações informando que o certificado não é confiável. Isso acontece pois ele não tem como confirmar se esse certificado é de quem diz ser por ser auto-assinado. Clique em Continue e veja a página que foi chamada:

Até aqui tudo bem. Já temos nosso servidor web respondendo requisições HTTPS. Agora vamos voltar no Postman e vamos realizar uma chamada para a nossa API utilizando o HTTPS. Para isso vamos mudar a chamada no Postman para utilizar o https ao invés do http. Neste mmento vamos direto no servidor, e não no TCPTrace. Lembre de colocar o endereço do seu servidor Web então:

 

Veja que recebemos a mesma resposta que a dada pelo HTTP, só que temos um ícone de informação ao lado do HTTP Status. Clique no ícone e você verá um balão de informações. Ele nos informa a situação do certificado e alguns dados de segurança.

 

Agora vamos mudar a nossa chamada para trafegar pelo TCPTrace. Vamos ativar e configurar nosso aplicativo:

Na sequencia clique em OK e o TCPTrace começará a escutar as requisições:

Volte ao Postman e mude a chamada informando que você agora quer acessar o endereço do TCPTrace na porta 8443 (aquela configurada para escutar as requisições). Clique em Enviar e veja a requisição respondendo:

 

Note que nada mudou em relação a última chamada. Mas agora ela correu pelo TCPTrace. Vamos ver o que foi logado no aplicativo?

 

Não conseguimos visualizar nenhuma informação pois os dados trafegados então criptografados. No meu de opções do TCPTrace clique em View e a seguir em Show NULLS e veja o que o TCPTrace realmente coletou:

 

 

Assim, sem qualquer mudança na nossa API REST, incluímos uma camada de criptografia no tráfego ao utilizar o HTTPS, aumentando o segurança da informação na nossa comunicação.

Até a próxima!

Discussão (0)1
Entre ou crie uma conta para continuar