REST API Security Guide

Knowledge of how to secure REST APIs is as much important as to write the APIs itself. A maioria das APIs de descanso são baseadas no protocolo HTTP, e qualquer usuário com conexão à internet pode acessá-los, assim como os usuários ruins também. É muito importante escrever APIs seguros para proteger o negócio.

Antes de começar a garantir APIs RESTful, vamos entender quais são todas as nossas opções como desenvolvedores? O que será bom para o nosso uso?

Table of Contents1. Authentication vs. Authorization2. Four Ways to Secure RESTful Web Services- BASIC Authentication- DIGEST Authentication- Client CERT Authentication- OAUTH2 API Keys3. RESTful Web Services Security Implementations- Using SecurityContext- Using Annotations4. Best Practices

diferença entre autenticação vs. autorização

Antes de entrar na discussão principal, vamos esclarecer nossos fatos sobre o que é autenticação e o que é autorização.

in plain simple English, authentication is the process of determining that “is user really someone who he claims to be”. Em termos técnicos, é o processo de login para o sistema através do nome de usuário/senha ou quaisquer mecanismos semelhantes, por exemplo, digitalização de impressão digital, token de segurança, questões de segurança ou token SAML recebido do login SSO. Deve haver algo que possa identificar o usuário de outros.

uma vez que o usuário está dentro do sistema, autorização refere-se a regras que determinam “o usuário está autorizado a fazer” e o que ele não é, por exemplo, um usuário normal pode postar uma mensagem em qualquer grupo público, mas os usuários apenas com papel de editor será capaz de excluir algo. A autorização é muitas vezes vista como tanto a configuração introdutória de permissões por um administrador de sistema e a verificação dos valores de permissão que já foram configurados quando um usuário está obtendo acesso ao sistema.

quando asseguramos Serviços Web RESTful, precisamos cuidar de ambos os fatores. Os dois conceitos são completamente ortogonais e independentes, mas ambos são centrais para o design de segurança, e a falha em obter qualquer um correto aumenta as chances de sistema comprometido..

quatro maneiras de garantir serviços Web RESTful

existem várias maneiras de garantir uma API RESTful em Java. Vamos passar por 4 escolhas mais populares:

2.1. Basic Authentication

It’s simplest of all techniques and probably most used as well. Você usa formulários de login / senha – é apenas Autenticação Básica. Introduz o seu nome de utilizador e senha e envia o formulário para o servidor, e a aplicação identifica – o como utilizador – é-lhe permitido usar o sistema-caso contrário, obtém um erro.

o principal problema com esta implementação de segurança é que as credenciais são propagadas de forma simples do cliente para o servidor. As credenciais são apenas codificadas com Base64 em trânsito, mas não criptografadas ou escondidas de qualquer forma. Desta forma, qualquer farejador poderia ler os pacotes enviados através da rede.

HTTPS é, portanto, normalmente preferido sobre ou usado em conjunto com a Autenticação Básica, o que torna a conversa com o servidor web totalmente criptografada. A melhor parte é que ninguém pode sequer adivinhar de fora que o Auth básico está acontecendo.

2.2. Digest Authentication

This authentication method makes use of a hashing algorithms to encrypt the password (called password hash) entered by the user before sending it to the server. Isto, obviamente, torna muito mais seguro do que o método básico de autenticação, no qual a senha do Usuário viaja em texto simples que pode ser facilmente lido por quem a intercepta.

Leia Mais: Gerar Senhas Criptografadas

Existem muitos algoritmos em java também, o que pode ser muito eficaz para segurança de senha como o MD5, SHA, BCrypt, SCrypt e PBKDF2WithHmacSHA1 algoritmos.

por favor lembre-se que uma vez que esta senha hash é gerada e armazenada na base de dados, você não pode convertê-la de volta para a senha original. Cada vez que o Usuário se autentica na aplicação, você tem que regenerar o hash de senha de novo, e corresponder com o hash armazenado na base de dados. Então, se o usuário Esqueceu sua senha, você terá que enviar-lhe uma senha temporária e pedir-lhe para alterá-la com sua nova senha. Bem, é uma tendência comum hoje em dia.

2.3. Autenticação CERT do cliente

este é um mecanismo no qual um acordo de confiança é estabelecido entre o servidor e o cliente através de certificados. Devem ser assinados por uma agência criada para garantir que o certificado apresentado para autenticação é legítimo, conhecido como CA.

usando esta técnica, quando o cliente tenta acessar um recurso protegido, em vez de fornecer um nome de usuário ou senha, ele apresenta o certificado para o servidor. O certificado contém a informação do Usuário para autenticação, incluindo credenciais de segurança, além de um único par de chaves público-privado. O servidor então determina se o Usuário é legítimo através da CA. Além disso, deve verificar se o usuário tem acesso ao recurso. Este mecanismo deve usar HTTPS como protocolo de comunicação, uma vez que não temos um canal seguro para evitar que alguém roube a identidade do cliente.

você pode encontrar um tutorial completo para gerar certificado de segurança em docs oracle oficial.

2.4. OAuth2 API Keys

se alguma vez desenvolveu aplicações que interagem com outras aplicações através da nuvem, por exemplo, integração no facebook ou autenticação no twitter, etc. então já usaste isto. Eles exigem que você forneça API key e API secret Para corretamente identificá-lo. Estas chaves e segredos da API são algumas cadeias codificadas aleatórias que são impossíveis de adivinhar.

para entender como funciona, vamos assumir que você está usando um Flickr (aplicação de compartilhamento de fotos) e quer postar algumas de suas fotos usando a API de descanso. Você constrói o pedido conforme documentado nos docs do Flickr, e depois envia-o.

então, ao receber o pedido, o Flickr autentica o usuário lendo a informação da chave API com a chave secreta que pertence ao usuário. Uma vez que estas validações são bem sucedidas, o servidor entrega a resposta ao cliente. Assim, obtemos uma resposta com todas as fotos que foram publicadas recentemente no Flickr.

como você vai notar, desta forma, você pode facilmente criar aplicações usando a API do provedor. Além disso, o provedor irá permitir que você autentique, acessar informações públicas.

se alguém começar a desrespeitar acordos, por exemplo, o envio de tráfego de lixo ou qualquer violação de política, o provedor retira a chave API e impede o uso abusivo de suas APIs.Implementações de segurança da API de repouso

para além dos conceitos acima, normalmente terá de proteger as suas API RESTful na sua empresa usando os métodos abaixo.

3.1. JAX-RS SecurityContext instance

the javax.ws.rs.core.SecurityContext interface provides access to security-related information for a request and is very similar to javax.servlet.http.HttpServletRequest.

acede ao texto de segurança injectando uma instância num campo de classe, método de setter ou parâmetro de método usando a anotação javax.ws.rs.core.Context, por exemplo, no código abaixo sc.isUserInRole() é usado para verificar a autorização para o utilizador.

3.2. Anotações de JAR-R para a autorização do nível do método

esta técnica é amplamente utilizada na aplicação empresarial e utilizada para verificar funções e responsabilidades de um usado autenticado – para qualquer determinada operação. JAX-R fornece anotações abaixo para este propósito.

  • @PermitAll
  • @DenyAll
  • @RolesAllowed

Um exemplo de utilização da anotação pode ser:

Leia Mais : JAX-RS authentication and authorization example

REST API Security Best Practices

Let’s note down some important points while designing security for your RESTful web services.Use apenas o protocolo HTTPS para que toda a sua comunicação seja sempre encriptada.

  • Nunca envie credenciais auth ou chaves API como consulta param. Eles aparecem em URL e podem ser registrados ou rastreados facilmente.
  • Utilize sempre o nível de encriptação mais difícil. Ajudará a ter mais confiança.
  • para os recursos expostos por serviços Web RESTful, é importante certificar-se de que qualquer pedido de PUT, POST e DELETE é protegido de falsificação Cross Site.
  • valide sempre os dados de entrada o mais rápido possível que é recebido no método servidor. Use apenas dados primitivos como parâmetro de entrada tanto quanto possível.
  • dependem do framework provided validation features as they are tested by large community already.
  • deixe-me saber os seus pensamentos e experiências sobre como garantir serviços web repousantes na sua organização.Feliz Aprendizagem !!

    este post foi útil?

    deixe-nos saber se você gostou do post. Só assim podemos melhorar.
    Sim
    Não

    Deixe uma resposta

    O seu endereço de email não será publicado.

    More: