Ícone do site Conviso AppSec

Melhores práticas de desenvolvimento seguro em API – OAuth2 e JWT

Desenvolvimento seguro em API

Não conseguimos imaginar nossos negócios sem o digital. Quando enviamos um Twitter, autenticamos em uma conta com nossa rede social, fazemos uma compra online ou consultamos o trânsito em tempo real por um aplicativo, nos bastidores APIs (Application Programming Interfaces) estão sendo executadas. Quais seriam as melhores práticas de desenvolvimento seguro em API?

Em nosso mundo de dispositivos e aplicações conectados, as APIs desempenham um papel crucial para facilitar a comunicação entre os diferentes sistemas e aplicações. Além de ser o conector de negócios B2B ou B2C, estamos falando de habilitar a conexão para milhares de dispositivos para internet das coisas (IOT). 

As APIs revolucionam o mundo da integração de sistemas e são grandes protagonistas da nossa era de Transformação Digital. Portanto, o desenvolvimento seguro das APIs é de extrema relevância para que as organizações forneçam acesso seguro e confiável a dados e serviços. Neste contexto, existem diversas tecnologias e boas práticas de segurança que podem ser aplicadas para garantir a proteção da comunicação baseada em API, neste artigo destacamos o OAuth2 e o Json Web Token (JWT).

Falaremos do OAuth2 por ser um padrão aberto para autorização que delega o processo a um servidor de autorização, permitindo que aplicações de terceiros acessem com segurança os dados do usuário. E incluímos a forma eficiente e compacta de requisição, ou token, JWT usada para autenticação e autorização em APIs. 

Acreditamos que a consciência e incorporação destas melhores práticas de segurança elevam a confiabilidade, integridade das informações e disponibilidade dos serviços das  APIs, diminuindo o risco e aumentando a credibilidade e a imagem das organizações.

OAUTH 2

Foi o tempo em que o processo de controle de acesso se baseava na apresentação de usuário e senha para aplicação. Hoje tanto a autenticação como a autorização possui suas etapas complexas para estabelecer a identidade do usuário e seu perfil de acesso, respectivamente. 

Ainda que algumas APIs sejam autenticadas com nome de usuário e senha, geralmente na forma de autenticação básica no cabeçalho, essa não é nossa recomendação. Como boa prática para trabalhar com a autorização de dispositivos e oferecer suporte de servidor para servidor, o OAuth 2.0 é nossa recomendação, permitindo uma ótima experiência do usuário e reforçando o desenvolvimento seguro em sua API.

Mas, o que é OAuth? Ficamos com a definição presente na lista de recomendação da Cheat Sheets Series da OWASP sobre Autenticação, em “use protocolos de autenticação que não requer senha”.

“Open Authorization (OAuth) é um protocolo que permite que uma aplicação se autentique no servidor como usuário, sem exigir senhas ou qualquer servidor de terceiros que atue como um provedor de identidade. Ele usa um token gerado pelo servidor e fornece como o fluxo de autorização ocorre, de modo que um cliente, como uma aplicação móvel, possa dizer ao servidor que usuário está usando o serviço.”

Aproveito para informar que falamos da diferença entre OAuth2 e SAML em artigo anterior.

Vantagens do OAuth 2.0

Como pontos positivos ao escolher usar Oauth 2 como protocolo de autorização, podemos citar a simplicidade na utilização e abrangência da tecnologia. Pois, pode ser usada para aplicações web, desktop, mobile. Além dessas, vale mencionar as vantagens de: 

Ameaças ao OAuth 2.0

É possível que atacantes ameacem os fluxos do Oauth com as técnicas de CSRF, XSS e

Open Redirect. As seguintes ameaças podem ser listadas:

Exemplos de vulnerabilidades:

Mais informações sobre as fraquezas pode ser encontrada na RFC-6819 de modelagem de ameaças e considerações de segurança do OAuth 2.0

Boas práticas de desenvolvimento seguro para OAuth 2.0

Por conta desses possíveis cenários de ataque é que é importante passar as boas práticas de desenvolvimento seguro em API ao se usar o OAuth 2.0:

JSON Web Token (JWT)

O padrão JWT define como transmitir e armazenar objetos JSON entre aplicações com segurança, simplicidade e de forma compacta. Trata-se de um padrão aberto documentado na RFC-7519. Largamente empregado na validação de serviços em Web Services, pelas  vantagens que veremos a seguir, já destacando, a possibilidade da validação local.

Conhecendo a estrutura do JWT vemos que é uma estrutura JSON composta por: Header, Payload e Signature. 

Por ser assinado digitalmente o JWT naturalmente garante a questão da integridade. Mas, vale a pena lembrar que se os dados transmitidos no payload são sensíveis, isso vai requerer a implementação de criptografia no payload para torná-lo confidencial. 

Mais detalhes sobre implementação segura de Json Web token (JWT) podem ser encontrados em nosso blog.

Vantagens do JWT

Que o JSON Web Token (JWT) é um meio compacto e seguro para transmitirmos as solicitações, isso já sabemos. Agora como anunciado, vamos ver outras vantagens no  desenvolvimento seguro em API desse mecanismo de codificação assinado:

Ameaças ao JWT

Exemplos de vulnerabilidades:

Melhores práticas de segurança para JWT

O JWT é uma forma ampla utilizada e conveniente de autenticar e autorizar usuários em APIs RESTful. Para garantir a segurança do JWT, é importante seguir as melhores práticas, como o uso de chaves secretas fortes, verificação de assinaturas e armazenamento seguro de tokens. Ao tomar as precauções de segurança necessárias, você pode reduzir o risco de incidentes de segurança e proteger suas APIs e os dados sensíveis que elas tratam.

Conclusão

Cuidar do desenvolvimento seguro em API traz consigo uma série de cuidados que incluem uso de protocolos de segurança e melhores práticas. O OAuth2 deve ser devidamente implementado para reduzir os riscos de segurança. E o JSON Web Token (JWT) pode ser usado para autenticação e autorização, mas deve ser protegido com chaves secretas fortes, assinaturas verificadas e armazenado com segurança.

Sair da versão mobile